Попытка загрузить фрейм данных pandas, используя функцию copy_to_sql teradataml - PullRequest
0 голосов
/ 20 сентября 2019

Я довольно новичок в загрузке данных в teradata.Метод, который я знаю, работает, вставляет строку за строкой, используя операторы вставки, но хотел бы избежать этого.Я пытаюсь напрямую загрузить фрейм данных моей панды в teradata, но пока не увенчался успехом.Я пробовал 2 метода, и я предпочитаю заставить метод 1 работать, но сначала хочу получить рабочее решение.

Я пробовал 2 метода.
1. Модуль Teradataml - copy_to_sql 2.Teradataмодуль - с помощью оператора вставки

метод 1 : создать таблицу с использованием функции copy_to_sql

from teradataml.dataframe.copy_to import copy_to_sql
from teradataml import create_context, remove_context

df # some dataframe

table_name="db.table"
copy_to_sql(df = df_new, table_name = "db.table", primary_index="index", if_exists="replace")

метод 2 : добавитьв уже созданную таблицу с помощью оператора вставки

import teradata

udaExec = teradata.UdaExec (appName=appname, version="1.0", logConsole=False)
connect = udaExec.connect(method="odbc",system=host, username=user,
                            password=passwrd)

num_of_chunks=100
table_name="db.table"
query='INSERT INTO '+table_name+' values(?,?,?,?,?);'
df_chunks=np.array_split(df_new2, num_of_chunks)
for i,_ in enumerate(df_chunks):
    data = [tuple(x) for x in df_chunks[i].to_records(index=False)]
    connect.executemany(query, data,batch=True)

**method 1** get the following error related to access.  Not sure while the SQL statement is adding quotes for the bolded table below:
OperationalError: (teradatasql.OperationalError) [Version 16.20.0.48] [Session 5229096] [Teradata Database] [Error 3524] The user does not have CREATE TABLE access to database U378597.
[SQL: 
CREATE multiset TABLE **"db.table"** (
    "PBP" VARCHAR(1024) CHAR SET UNICODE, 
    recon VARCHAR(1024) CHAR SET UNICODE, 
    date2 TIMESTAMP(6), 
    "CF" FLOAT, 
    "index" VARCHAR(1024) CHAR SET UNICODE
)
primary index( "index" )

]
**method 2** get a error about inserting dates.  Assume datetime needs to be converted in someway to work in teradata table but unsure how

DatabaseError: (6760, '[HY000] [Teradata][ODBC Teradata Driver][Teradata Database] Invalid timestamp. ')

1 Ответ

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

table_name - это неквалифицированное имя.Чтобы указать «базу данных» Teradata, в которой должна создаваться таблица, используйте отдельный параметр schema_name.

А для "метода 2" рассмотрите возможность использования пакета teradatasql вместо teradata.Или я полагаю, вы могли бы .isoformat(' ') отметка времени.

...