Я пытаюсь использовать pandas to_sql
для существующей таблицы в базе данных Teradata, но у меня возникла эта ошибка 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, schema='DB', if_exists='replace', 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'
, а затем отбрасываю и снова создаю таблицу. но я все еще хочу понять, почему и как исправить эти ошибки.
Вопросов:
- Каков синтаксис для включения QVCI непосредственно для Teradata?
- Есть ли способ ПРИОБРЕСТИ CLOB на DATE? Как?
- Почему
if_exists='replace'
зависит от QVCI, а неif_exists='append'
?
Спасибо!
dtype
в документация дляto_sql
. А что касается вашего третьего вопроса, см. Соответствующий ответ здесь. - person Gord Thompson   schedule 09.09.2020