将CSV文件加载到Redshift而不需要通过S3传递

6
我正在使用SQL Workbench/J与Redshift集群进行交互,并希望将一个包含约500k行的CSV文件加载到Redshift表中(我具有插入权限),而无需使用COPY命令(因为我没有将其复制到S3的权限)。您是否知道是否可行(可能使用insert),如果可以,能否帮助我?请注意,我唯一拥有的特权是:在集群中选择、插入、更新和删除表格。谢谢。

据我所知,您可以使用Python脚本来完成此操作。 - Rahul Gupta
1
我知道你想在没有S3的情况下完成这个任务,但是copy命令非常适合这种用例。我保证你不会想使用SQL Workbench / J进行插入操作;在500K行的情况下,那将需要不可行的时间。你能否请你的开发运维人员为你获取访问S3存储桶的权限? - Niels Joaquin
2个回答

1
COPY命令是将数据加载到Redshift中的最佳方式。唯一的其他方式是逐行INSERT数据,可以使用Python脚本利用pyscopg2在与Redshift建立连接后运行INSERT SQL查询来完成。

因此,只需逐行迭代CSV文件并在所有行上执行INSERT查询即可:

import psycopg2
conn = psycopg2.connect("dbname = 'your_db_name' user= 'your_user' host='redshift_cluster_endpoint_without_port_number' port='port_number' password='password'")
cur = conn.cursor()
for row in rows:
    cur.execute("INSERT INTO TABLE_NAME VALUES(%s,%s,%s,%s)" %(row[0],row[1],row[2],row[3])) 

row[0],row[1],row[2],row[3]是一行中所有列的数据。请注意,逐行插入将比使用COPY命令慢得多且效率更低。


-2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接