我如何将数据从数据框(在 python 中)插入到 greenplum table?
How i can insert data from dataframe(in python) to greenplum table?
问题陈述:
我有多个 csv 文件。我正在使用 python 清理它们并使用 bcp 将它们插入 SQL 服务器。现在我想将其插入 Greenplum 而不是 SQL 服务器。请建议一种直接从 python 数据帧批量插入 greenplum table 到 GreenPlum table.
的方法
解决方法:(我能想到的)
我能想到的方式是 CSV-> Dataframe -> Cleainig -> Dataframe -> CSV -> 然后使用 Gpload 进行批量加载。并将其集成到 Shell 脚本中以实现自动化。
有没有人有好的解决方案。
将数据直接从数据帧加载到 gp 时出现问题 table:
作为 gpload 请求文件路径。我可以将变量或数据框传递给它吗?有什么方法可以批量加载到 greenplum 中吗?我不想从数据帧创建 csv 或 txt 文件,然后将其加载到 greenplum。
我会使用 psycopg2 和 io 库来执行此操作。 io 是内置的,您可以使用 pip(或 conda)安装 psycopg2。
基本上,您将数据帧写入 csv 格式的字符串缓冲区 ("memory file")。然后你使用 psycopg2 的 copy_from
函数将它批量 load/copy 到你的 table.
这应该让你开始:
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()
问题陈述:
我有多个 csv 文件。我正在使用 python 清理它们并使用 bcp 将它们插入 SQL 服务器。现在我想将其插入 Greenplum 而不是 SQL 服务器。请建议一种直接从 python 数据帧批量插入 greenplum table 到 GreenPlum table.
的方法解决方法:(我能想到的)
我能想到的方式是 CSV-> Dataframe -> Cleainig -> Dataframe -> CSV -> 然后使用 Gpload 进行批量加载。并将其集成到 Shell 脚本中以实现自动化。 有没有人有好的解决方案。
将数据直接从数据帧加载到 gp 时出现问题 table:
作为 gpload 请求文件路径。我可以将变量或数据框传递给它吗?有什么方法可以批量加载到 greenplum 中吗?我不想从数据帧创建 csv 或 txt 文件,然后将其加载到 greenplum。
我会使用 psycopg2 和 io 库来执行此操作。 io 是内置的,您可以使用 pip(或 conda)安装 psycopg2。
基本上,您将数据帧写入 csv 格式的字符串缓冲区 ("memory file")。然后你使用 psycopg2 的 copy_from
函数将它批量 load/copy 到你的 table.
这应该让你开始:
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()