Redshift COPY csv in S3 using python



HI 我有以下功能来保存 csv 文件:

mysql_cur = mysql_conn.cursor()
mysql_cur.execute('select * from %s where Date > "2018-01-01";' % mysql_table_name  )
description = mysql_cur.description
rows = mysql_cur.fetchall()
for row in rows:
c.writerow(row)

然后,我手动将文件上传到 S3 存储桶。

最后我运行 COPY 查询:

redshift_cur = redshift_conn.cursor()
sql = """copy kpi_kpireport from 's3://clab-migration/kpi.csv' 
credentials 'aws_access_key_id=ID;aws_secret_access_key=KEY/KEY/pL/KEY'
csv;"""
print(redshift_cur.execute(sql))

当我在 SQL Workbench/J 中使用它时,COPY 命令可以工作,我只是不确定我在这里用不复制任何行的 execute 语句中的语法做错了什么。

实际上,您没有在Redshift中看到数据的原因似乎是您没有启用自动提交,因此,您的命令已成功执行,但它确实将数据copyRedshift中,但没有提交。因此,当您通过从consoleWorkBench/J查询select时,您看不到数据。

您应该显式启动和提交事务。 我只是给你一个简单的工作例子。

import psycopg2

def redshift():
conn = psycopg2.connect(dbname='**_dev_**', host='888888888888****.u.****.redshift.amazonaws.com', port='5439', user='******', password='********')
cur = conn.cursor();
# Begin your transaction
cur.execute("begin;")
cur.execute("copy kpi_kpireport from 's3://clab-migration/kpi.csv' credentials 'aws_access_key_id=ID;aws_secret_access_key=KEY/KEY/pL/KEY' csv;")
# Commit your transaction
cur.execute("commit;")
print("Copy executed fine!")
redshift();

现在,如果您运行上面的代码,您将看到复制的数据。

如果从上面的代码中删除两行,cur.execute("begin;")cur.execute("commit;")运行它,即使成功运行而没有错误,您也不会在 Redshift 中看到数据。

最新更新