我正在尝试对Teradata数据库中的现有表使用熊猫to_sql
,但出现此QVCI错误。经过一些在线研究之后,我将ODBC驱动程序升级到17.00,但是仍然遇到相同的错误。
现有表格:
我正在使用sqlalchemy_teradata
这是代码:
a_df.to_sql(name='TEST_LA_TEMP',con=engine,schema='DB',if_exists='replace',index=False)
然后我尝试指定类型,但出现相同的错误。
from sqlalchemy.types import INTEGER,VARCHAR,Date
a_df.head()
a_df.to_sql(name='TEST_LA_TEMP',con=engine_ldap,index=False,dtype={'id': INTEGER,'p_name': VARCHAR(20),'dept': VARCHAR(20),'update_date': Date})
错误:
DatabaseError: (teradata.api.DatabaseError) (9719,'[HY000] [Teradata][ODBC Teradata Driver][Teradata Database](-9719)QVCI feature is disabled.')
[SQL: SELECT *
FROM dbc.ColumnsQV
WHERE DatabaseName (NOT CASESPECIFIC) = CAST(? as VARCHAR(128)) (NOT CASESPECIFIC) AND TableName=?]
[parameters: ('DB','TEST_LA_TEMP')]
当我使用相同的代码导入到新的(不存在的)表中时,它可以正常工作,但是对于大多数列,它返回CLOB
作为数据类型
然后,我尝试将CLOB
类型转换为正确的类型,但提示CLOBs can only be converted to CHAR TO VARCHAR
缺少我的update_date
列。
如果我改用if_exists='append'
,则可以使它工作,然后再次拖放并创建表。但我仍然想了解为什么以及如何解决这些错误。
问题:
- 直接为Teradata启用QVCI的语法是什么?
- 是否有办法将CAST CLOB设置为DATE?怎么样?
- 为什么
if_exists='replace'
依赖QVCI但不依赖if_exists='append'
?
谢谢!