使用Python在S3中进行Redshift COPY CSV

时间:2018-07-02 06:28:47

标签: python copy amazon-redshift

嗨,我具有以下功能来保存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语句中的语法不复制任何行。

1 个答案:

答案 0 :(得分:1)

实际上,您没有在Redshift中看到数据的原因似乎是您尚未启用自动提交,因此,您的命令已成功执行,但确实将copy数据写入了Redshift,但没有提交。因此,selectconsole中的查询WorkBench/J不会显示数据。

您应该开始并明确地提交事务。 我只是给你一个简单的工作示例。

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中看到数据。