问题陈述:
我有多个csv文件。我正在使用python清理它们并使用 bcp 将它们插入SQL服务器。现在我想将其插入Greenplum而不是SQL Server。请建议一种直接从python数据框到GreenPlum表批量插入greenplum表的方法。
解决方案:(我能想到的)
我能想到的方式是CSV->数据帧 - > Cleainig - >数据帧 - > CSV - >然后使用 Gpload 进行批量加载。并将其集成到Shell脚本中以实现自动化。 有没有人有一个很好的解决方案。
直接从dataframe加载数据到gp表的问题:
因为gpload要求提供文件路径。我可以将varibale或数据框传递给它吗?有没有办法大量加载到greenplum?我不想从dataframe创建一个csv或txt文件,然后将其加载到greenplum。
答案 0 :(得分:3)
我会使用psycopg2和io库来做到这一点。 io是内置的,您可以使用pip(或conda)安装psycopg2。
基本上,您将数据帧写入csv格式的字符串缓冲区(“内存文件”)。然后使用psycopg2的copy_from
函数将其批量加载/复制到您的表中。
这应该让你开始:
import io
import pandas
import psycopg2
# Write your dataframe to memory as csv
csv_io = io.StringIO()
dataframe.to_csv(csv_io, sep='\t', header=False, index=False)
csv_io.seek(0)
# Connect to the GreenPlum database.
greenplum = psycopg2.connect(host='host', database='database', user='user', password='password')
gp_cursor = greenplum.cursor()
# Copy the data from the buffer to the table.
gp_cursor.copy_from(csv_io, 'db.table')
greenplum.commit()
# Close the GreenPlum cursor and connection.
gp_cursor.close()
greenplum.close()