如何在Python Teradata模块PyTD中使用Volatile Tables

时间:2018-04-04 22:13:07

标签: python sql pandas teradata

有没有人知道如何在PyTd Teradata ODBC模块中使用volatile表?我可以运行单个查询并返回结果,但如果我尝试使用volatile表构建查询,我会一直收到错误。有帮助吗?我对python很新。

我正在使用

udaExec = td.UdaExec (appName="dpull", version="1.0",logConsole=False)
with udaExec.connect(method="ODBC",dsn="tdata", username="un", 
password="pw") as session:

query = """"
create volatile table vol_table
,no fallback, no before journal, no after journal as 
    (
    select a, b, c
    from my_table1
    )
with data primary index (a)
on commit preserve rows

Select vt.a, vt.b, vt.c, t2.a
from vol_table vt
inner join table2 t2
on vt.anything = t2.anything
""""
df = pd.read_sql(query,session)

错误:

 `InterfaceError: ('SQL_INVALID_HANDLE', 'Invalid handle passed to SQLGetDiagRecW.')`

1 个答案:

答案 0 :(得分:2)

好的,感谢Teradata forum的一些帮助,我能够解决这个问题。您可以按照相同的结构添加任意数量的查询:

import teradata as td
import pandas as pd
from teradata import tdodbc

udaExec = td.UdaExec (appName="dpull", version="1.0",logConsole=False)
with udaExec.connect(method="ODBC",dsn="tdata", username="un", 
password="pw") as session:

query1 = """
    create volatile table vol_table
    ,no fallback, no before journal, no after journal as 
        (
        select a, b, c
        from my_table1
        )
     with data primary index (a)
     on commit preserve rows;
"""
query2 = """
    Select vt.a, vt.b, vt.c, t2.x
    from vol_table vt
    inner join table2 t2
    on vt.a = t2.a
"""
session.execute(query1)
df = pd.read_sql(query2,session)