将csv加载到红移而不经过S3

时间:2017-05-19 13:08:40

标签: amazon-s3 amazon-redshift import-csv

我正在使用SQL workbench / J与redshift集群交互,我想在不使用COPY命令的情况下将CSV文件(大约500k行)加载到redshift表(我有插入权限)中(因为我没有有权复制到s3)。

你知道它是否可行(使用插入),如果是的话,你可以帮助我吗?

请注意,我唯一的权限是:选择,插入,更新和删除群集中的表。

感谢。

2 个答案:

答案 0 :(得分:0)

COPY命令是将数据加载到Redshift 的最佳方式。唯一的另一种方法是逐行INSERT数据,这可以使用python脚本完成,该脚本在建立与Redshift的连接后利用pyscopg2运行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命令更慢且效率更低。

答案 1 :(得分:-2)

您可以COPY命令从远程主机加载数据。见http://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-remote-hosts.html