我有一个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: HY000ODBC Teradata驱动程序无效时间戳。
有人能帮我解决问题吗?如果我正在正确地编写bteq脚本,也需要一些建议。我想避免每次丢桌子或者创建一个新的桌子。
发布于 2019-09-26 04:33:21
我成功地将我的数据推入了Teradata。我所做的就是将我在dataframe中的时间戳列从datetime64转换为object。下面是我在运行上述代码之前添加的唯一代码行
df=df.astype(object).where(pd.notnull(df),'')https://stackoverflow.com/questions/58100000
复制相似问题