我正在努力推动(使用COPY)从s3到Redshift的大文件。我在python中使用sqlalchemy来执行sql命令,但它看起来只有在我初步TRUNCATE表时副本才有效。
连接正常:
> sudo zip -d org.eclipse.birt.runtime_4.6.0-20160607.jar META-INF/ECLIPSE_.RSA
> sudo zip -d org.eclipse.birt.runtime_4.6.0-20160607.jar META-INF/ECLIPSE_.SF
> sudo zip -d org.eclipse.datatools.connectivity.oda_3.5.0.201603142002.jar META-INF/ECLIPSE_.RSA
> sudo zip -d org.eclipse.datatools.connectivity.oda_3.5.0.201603142002.jar META-INF/ECLIPSE_.SF
使用此命令字符串(如果我在COPY命令之前截断表)
from sqlalchemy import create_engine
engine = create_engine('postgresql://XXXX:XXXX@XXXX:XXXX/XXXX')
如果我删除“TRUNCATE TABLE public.my_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)
但该命令与任何其他SQL客户端(例如DBeaver)完美配合
答案 0 :(得分:0)
谢谢Ilja。使用此命令可以:
((expression))
The expression is evaluated according to the rules described below
under ARITHMETIC EVALUATION. If the value of the expression is non-
zero, the return status is 0; otherwise the return status is 1. This
is exactly equivalent to let "expression".
我不知道为什么我能够使用字符串前面的TRUNCATE位来推送数据。
伊万