在 python (sqlalchemy) 中将数据从 S3 复制到 RedShift
COPY data from S3 to RedShift in python (sqlalchemy)
我正在尝试将一个大文件从 s3 推送(使用 COPY)到 Redshift。我在 python 中使用 sqlalchemy 来执行 sql 命令,但看起来副本只有在我初步截断 table 时才有效。
连接正常:
from sqlalchemy import create_engine
engine = create_engine('postgresql://XXXX:XXXX@XXXX:XXXX/XXXX')
使用此命令字符串(如果我在 COPY 命令之前截断 table)
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)
如果我删除 "TRUNCATE TABLE 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)完美配合
谢谢伊利亚。使用此命令它可以工作:
engine.execute(text(toRedshift).execution_options(autocommit=True))
我不知道为什么我能够使用字符串前面的 TRUNCATE 位推送数据。
伊万
我正在尝试将一个大文件从 s3 推送(使用 COPY)到 Redshift。我在 python 中使用 sqlalchemy 来执行 sql 命令,但看起来副本只有在我初步截断 table 时才有效。
连接正常:
from sqlalchemy import create_engine
engine = create_engine('postgresql://XXXX:XXXX@XXXX:XXXX/XXXX')
使用此命令字符串(如果我在 COPY 命令之前截断 table)
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)
如果我删除 "TRUNCATE TABLE 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)完美配合
谢谢伊利亚。使用此命令它可以工作:
engine.execute(text(toRedshift).execution_options(autocommit=True))
我不知道为什么我能够使用字符串前面的 TRUNCATE 位推送数据。
伊万