将 Python3 中的数据帧写入 Netezza

Posted

技术标签:

【中文标题】将 Python3 中的数据帧写入 Netezza【英文标题】:Writing a dataframe from Python3 into Netezza 【发布时间】:2017-06-22 05:56:11 【问题描述】:

我想直接从 Python 将数据帧写入 Netezza。这甚至可能吗?我现在正在做的是导出到 CSV,然后上传到 Netezza,这非常耗时......

一个虚拟数据集如下:

s1=pd.Series(["Test1"])
s2=pd.Series(["Test2"])
s3=pd.Series(["Test3"])
df=pd.DataFrame([list(s1), list(s2),  list(s3)],  columns =  ["STATUS"])

然后我连接到 Netezza(示例):

#import libraries
import pandas as pd
import pyodbc

engine = pyodbc.connect("DRIVER=NetezzaSQL;SERVER=netezzakm01;PORT=5480;DATABASE=SDSNZKM01;UID=KMMTBA;PWD=xxx;")

这是我所能得到的,因为我尝试写的其他任何东西都远未实现......有可能做到这一点吗?

【问题讨论】:

【参考方案1】:

到目前为止,我能做的最好的事情如下:

    netezza 一侧,我创建了一个具有我想要的结构的表,

    创建表 mytablename ( MYDATE 日期, MYDISTRIBUTEKEY BIGINT, 某些字符串 VARCHAR(128) 默认为 NULL, 某些整数默认为 NULL, SOMEFLOAT FLOAT 默认 NULL ) 在 (mydistributekey) 上分发;

    我的数据框说 mydf 是这样的

    列表(mydf.columns) == ['MYDATE','MYDISTRIBUTEKEY','SOMESTRING','SOMEINT','SOMEFLOAT']

    将数据帧转储到磁盘

    mydf.to_csv('df_on_disk.tab',sep='\t',index=False,header=False)

    您现在可以将磁盘上的文件从netezza 批量加载到netezza。请注意,我通过 JDBC 连接,使用 jaydebeapi

    INSERT INTO mytablename SELECT * FROM EXTERNAL 'df_on_disk.tab' USING (DELIM '\t' REMOTESOURCE 'JDBC');在 mytablename 上生成统计信息;

这不是确切的解决方案,但您会想要做类似的事情。

【讨论】:

以上是关于将 Python3 中的数据帧写入 Netezza的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 将列表中的数据帧写入多个 excel 文件

将数据作为列表加载到 Netezza 非常慢

将 spark 数据帧行写入 dynamoDB 表中的项目

使用 Python3 将 Bytes 对象转换为 Pandas 数据帧会产生一个空数据帧。为啥?

将火花数据帧写入固定宽度文件java spark

将大型 Spark 数据帧从数据块写入 csv 失败