Переместить panda df в таблицу teradata: [HY000] [Teradata] [ODBC Teradata Driver] [База данных Teradata] Неверная временная метка - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть df, который я хочу переместить в таблицу teradata.Я использую структуру, которая обсуждалась на этой платформе.Однако я получаю несколько ошибок.Вся логика загрузки df в teradata такова:

1) Если таблица не существует, создайте таблицу, иначе пропустите создание.

2) Начните загрузку df в таблицу.(Обратите внимание, что я передам несколько файлов xlsx в df и в конечном итоге добавлю их в таблицу teradata)

Я написал скрипт bteq для создания таблицы, которая выглядит следующим образом:

    FROM DBC.TABLES WHERE DATABASENAME = 'abc' AND TABLENAME = 'sample';

.IF ACTIVITYCOUNT <> 0 THEN .GOTO SKIP_CREATION
.IF ACTIVITYCOUNT = 0 THEN .GOTO TABLE_NOT_EXISTS

.LABEL TABLE_NOT_EXISTS 
CREATE TABLE abc.sample ( 
col1 VARCHAR(400) CHARACTER  SET LATIN NOT CASESPECIFIC, 
col2 VARCHAR(400) CHARACTER SET LATIN NOT CASESPECIFIC,
.
.
col23  TIMESTAMP(0) WITH TIME ZONE FORMAT 'YYYY-MM-DD HH:MI:SSZ', 
col24 TIMESTAMP(0) WITH TIME ZONE FORMAT 'YYYY-MM-DD HH:MI:SSZ'
);

.LABEL SKIP_CREATION
.LOGOFF

Мой код Python для перемещения df к teradata:

df=some data frame
host,username,password = 'host','username', "password"
num_of_chunks = 1000
insert_query= "INSERT INTO abc.sample VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
udaExec = teradata.UdaExec (appName="IMC", version="1.0", logConsole=False)
with udaExec.connect(method="odbc",system=host, username = username,
                         password=password, driver="Teradata") as session:
    file_exist=session.execute(file=r"Path of the bteq file" ,fileType="bteq",ignoreErrors=[3803])
    schedule_chunks = np.array_split(df, num_of_chunks)

    for i,_ in enumerate(schedule_chunks):

        data = [tuple(x) for x in schedule_chunks[i].to_records(index=False)]

            session.executemany(insert_query, data,batch=True) 

Когда я запускаю это, я получаю следующее сообщение об ошибке:

DatabaseError: [HY000] [Teradata] [Драйвер ODBC Teradata] [База данных Teradata] Неверная временная метка.

Может ли кто-нибудь помочь мне с сообщением, если я ошибаюсь?Также нужно некоторое предложение, если я правильно пишу скрипт bteq.Я хочу не бросать таблицы и не создавать новые каждый раз.

1 Ответ

0 голосов
/ 26 сентября 2019

Мне удалось успешно перенести мой фрейм данных в Teradata.Все, что я сделал, это преобразовал мои столбцы меток времени в моем фрейме данных из datetime64 в объект.Ниже приведена единственная строка кода, которую я добавил перед запуском вышеуказанного кода

df=df.astype(object).where(pd.notnull(df),'')
...