将 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 文件