我正在使用 SQL 工作台/J 与红移集群进行交互,我想将 CSV 文件(大约 500k 行(加载到 redshift 表中(我确实有插入权限(而不使用 COPY 命令(因为我没有复制到 s3 的权限(。
你知道这是否可行(使用插入(,如果是,你能帮我吗?
请注意,我拥有的唯一权限是:选择,插入,更新和删除集群中的表。
谢谢。
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
命令慢得多,效率也更低。
您可以 COPY 命令从远程主机加载数据。 请参阅 http://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-remote-hosts.html