我試圖推動(與複製)從s3到Redshift的大文件。我在Python中使用sqlalchemy來執行sql命令,但它看起來副本只有當我初步截斷表時才起作用。複製數據從S3到RedShift在python(sqlalchemy)
連接工作正常:
from sqlalchemy import create_engine
engine = create_engine('postgresql://XXXX:[email protected]:XXXX/XXXX')
用這個命令字符串(如果我截斷COPY命令之前表)
toRedshift = "TRUNCATE TABLE public.my_table; COPY public.my_table from 's3://XXXX/part-p.csv' CREDENTIALS 'aws_access_key_id=AAAAAAA;aws_secret_access_key=BBBBBBB' gzip removequotes IGNOREHEADER 0 delimiter '|';"
engine.execute(toRedshift)
如果我刪除了 「截斷表public.my_table;」位
toRedshift = "COPY public.my_table from 's3://XXXX/part-p.csv' CREDENTIALS 'aws_access_key_id=AAAAAAA;aws_secret_access_key=BBBBBBB' gzip removequotes IGNOREHEADER 0 delimiter '|';"
engine.execute(toRedshift)
,但完全與任何其他SQL客戶端(如DBeaver例如)命令的工作
很肯定這歸結爲[如何自動提交作品(http://docs.sqlalchemy.org/en/latest/core/connections.html#understanding-autocommit),但還不確定如何,或者如果有的話。 AUTOCOMMIT_REGEXP模式中沒有列出TRUNCATE和COPY。嘗試在'text(stmt).execution_options(autocommit = True)'構造中包裝你的''COPY ...''語句並將其傳遞給'engine.execute()'。 –
engine.execute(text(stmt).execution_options(autocommit = True)) – user3620915