我在执行copy命令将数据从S3加载到Amazon的python Redshift时遇到问题。
我有以下复制命令:
copy moves from 's3://<my_bucket_name>/moves_data/2013-03-24/18/moves'
credentials 'aws_access_key_id=<key_id>;aws_secret_access_key=<key_secret>'
removequotes
delimiter ',';
当我使用SQL Workbench/j执行这个命令时,一切都按预期工作,但是当我尝试使用python和psycopg2执行这个命令时,命令会传递OK,但不会加载任何数据,也不会抛出任何错误。
尝试了以下两个选项(假设psycopg2连接正常,因为它正常):
cursor.execute(copy_command)
cursor.copy_expert(copy_command, sys.stdout)
两次传递都没有警告,但未加载数据
有什么想法?
谢谢
如果使用的是sqlalchemy,则copy命令本身不会自动提交。这对我有效:
我已经成功地使用了这个精确的设置(psycopg2+redshift+COPY)。你事后承诺了吗?SQL Workbench默认为自动提交,而psycopg2默认为打开事务,因此在对连接调用commit()之前,数据将不可见。
完整的工作流程是:
我不相信copy_expert()或任何游标。copy_*命令都可以使用Redshift。
首先,确保事务已提交。
您还可以通过以下方式确保事务提交(确保释放资源)
当连接退出with块时,如果该块没有引发异常,则事务被提交。如果发生异常,则回滚事务。
其次,当要加载的数据花费较长时间并且超过连接超时(并且无法提交)时,即使执行commit也没有帮助。因此,当显式提交没有帮助时,尝试增加超时。
相关问题 更多 >
编程相关推荐