【发布时间】:2018-09-14 14:51:31
【问题描述】:
有人知道如何在 PyTd Teradata ODBC 模块中使用易失性表吗?我可以运行单个查询并让结果返回,但是如果我尝试使用易失性表构建查询,我会不断收到错误消息。有什么帮助吗?我对 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.')`
【问题讨论】:
-
不知道 TyPd,但是 sql 看起来不对。应该是
PRIMARY INDEX (a) WITH DATA ON COMMIT PRESERVE ROWS; Select...。select a,b,c需要from <table>。最后缺少;。你有没有直接在任何客户端尝试 sql? -
感谢您指出缺少的“来自
”。 “主索引”上的 sql 适用于我在 Teradata 中的逻辑。我确实从一个真实的查询中改编了这个示例查询。就在我尝试添加易失性表时,我通过 Python Teradata 模块查询单个查询没有任何问题。我正在尝试使用其他脚本对每个查询调用 session.execute(my_query) 以查看是否有效。更多内容...
查询定义和select之间还是少了一个;,; at the end. The)`后面preserve rows太多了,没有对应的开口(。根据会话默认模式(ansi 或 Teradata),在create table之后的 ansi 模式中需要commit;。感谢您指出这一点,但问题不在于查询。正如您所指出的,我在编写示例查询时有拼写错误。假设查询很好,我想知道为什么我在尝试使用 Teradata Python 模块中的易失性表时收到错误消息。所以我尝试运行并更正查询,现在我收到错误:(3932, '[25000] [Teradata][ODBC Teradata Driver][Teradata Database] Only an ET or null statement is legal after a DDL Statement. ')
标签: python sql pandas teradata