【问题标题】:How to load LOB files from Teradata's DBC.QRYLOGSQL into a Pandas Dataframe如何将 LOB 文件从 Teradata 的 DBC.QRYLOGSQL 加载到 Pandas 数据帧中
【发布时间】:2021-07-22 08:42:33
【问题描述】:

问题:当通过 Python 代码对 DBC.QRYLOGSQL 运行 Teradata 查询然后加载到 pandas 数据帧中时;我遇到以下问题:

  1. 似乎只显示 DBC.QRYLOGSQL SqlTextInfo 列中包含的 LOB 的前几行。

  2. 它看起来充满了正则表达式

df.SqlTextInfo 值示例:

SEL\rA.*,\r--B.ACCT_KEY AS CUST_ACCT_KEY....

问题:

  1. 如何验证是否已将 Teradata 的 DBC.QRYLOGSQL.SqlTextInfo 中的每个 LOB 全部加载到 pandas 数据框中?
  2. 我如何验证它对于普通人来说是可读的;即它没有在 RegEx 中表示?
  3. 如何查看作为长字符串记录到我的 pandas 数据框列中的整个 LOB?

我的代码

import teradata;
 
#Establish the connection to the Teradata database
udaExec = td.UdaExec (appName="HelloWorld", version="1.0", logConsole=False)
  
session = udaExec.connect(method="odbc",
                          system="HOSTNAME",
                          username="USERNAME",
                          password="PASSWORD",
                          driver="Teradata")

#query to fetch the row of data from the DBC.QRYLOGSQL table in Teradata
query = "SELECT QueryID, SqlTextInfo FROM DBC.QRYLOGSQL WHERE QueryID = 12345"

#Fetch the data from Teradata using Pandas Dataframe
df = pd.read_sql(query, session)
counter = len(df)

【问题讨论】:

    标签: python-3.x pandas dataframe teradata


    【解决方案1】:

    第 1 步 - 验证 DBC.QRYLOGSQL.SqlTextInfo LOB 的完整字符串长度是否已加载,而不仅仅是从运行 df.head() 中看到的内容。

    运行以下命令:

    df['SqlTextInfo'].str.len()
    

    结果:

    注意:字符串的长度远远长于运行 df.head() 后列中出现的长度

    第 2 步:从 df['SqlTextInfo']

    中删除 RegEx
    # Take dataframe column as a series and convert 
    # to String Data Type the load as a new column to the existing data frame
    
    df['SQL_Cleaned'] = pd.Series(df['SqlTextInfo'], dtype="string")
    

    第三步:查看数据框时显示SQL全文:

    pd.options.display.max_colwidth = 300
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 2019-01-05
      相关资源
      最近更新 更多