使用python和psycopg2将数据从S3复制到AWS红移

使用python和psycopg2将数据从S3复制到AWS红移,python,psycopg2,amazon-redshift,Python,Psycopg2,Amazon Redshift,执行copy命令将数据从S3从python加载到Amazon的红移时出现问题。 我有以下复制命令: 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 ','; 这两个过程都

执行copy命令将数据从S3从python加载到Amazon的红移时出现问题。
我有以下复制命令:

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 ',';
这两个过程都没有警告,但数据尚未加载

想法


谢谢

语法应该类似于DDL语句

# Create table
c.execute('''CREATE TABLE stocks
             (date text, trans text, symbol text, qty real, price real)''')

我已经成功地使用了这个精确的设置(psycopg2+redshift+COPY)。你后来犯了什么罪?SQL Workbench默认为自动提交,而psycopg2默认为打开事务,因此在连接上调用commit()之前,数据将不可见

完整的工作流程是:

conn = psycopg2.connect(...)
cur = conn.cursor()
cur.execute("COPY...")
conn.commit()

我不相信copy_expert()或任何游标.copy_*命令可以与红移一起工作。

首先,确保事务已提交

您还可以通过以下方式确保事务提交(确保释放资源)

当连接退出with块时,如果该块未引发异常,则提交事务。在异常情况下,事务将回滚


其次,当要加载的数据需要很长时间并且超过连接超时(并且无法提交)时,即使执行提交也没有帮助。因此,当显式提交没有帮助时,尝试增加超时

如果您使用的是sqlalchemy,则copy命令本身不会自动提交。这对我很有用:

from sqlalchemy import create_engine
eng = create_engine(...)
command = """
copy command here
"""
conn = eng.connect()
result = conn.execution_options(autocommit=True).execute(command)
result.close()

您需要在execute()之后调用commit(),否则它将无效。这为我解决了问题。我试图使用我的sqlalchemy框架来运行copy命令,但无法提交负载。这里的相关线程:不幸的是,sqlalchemy的自动提交解决方案在这里解释说对我不起作用,但是上面的psycopg2解决方案did@Voket它在为我执行时被阻塞,然后无法运行conn.commit()。有什么建议吗?谢谢@str,我正在努力解决这个问题,完全忘了检查提交!
conn = psycopg2.connect(conn_string)
cur = conn.cursor()
cur.execute(copy_cmd_str)
conn.commit()
with psycopg2.connect(conn_string) as conn:
    with conn.cursor() as curs:
        curs.execute(copy_cmd_str)
from sqlalchemy import create_engine
eng = create_engine(...)
command = """
copy command here
"""
conn = eng.connect()
result = conn.execution_options(autocommit=True).execute(command)
result.close()