我正在使用SQL Workbench/J与Redshift集群进行交互,并希望将一个包含约500k行的CSV文件加载到Redshift表中(我具有插入权限),而无需使用COPY命令(因为我没有将其复制到S3的权限)。您是否知道是否可行(可能使用insert),如果可以,能否帮助我?请注意,我唯一拥有的特权是:在集群中选择、插入、更新和删除表格。谢谢。
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
命令慢得多且效率更低。
您可以使用COPY命令从远程主机加载数据。请参见http://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-remote-hosts.html
copy
命令非常适合这种用例。我保证你不会想使用SQL Workbench / J进行插入操作;在500K行的情况下,那将需要不可行的时间。你能否请你的开发运维人员为你获取访问S3存储桶的权限? - Niels Joaquin