有没有办法将current_date传递给S3路径的复制命令
for ex:在AWS Redshift中复制来自&s 39 / rootlocation / _current_date _ / * .txt的tablename
答案 0 :(得分:1)
John是正确的,不可能动态构建COPY
语句。但是,我找到了一种解决方法,只使用SQL,只需要几个命令:
create temporary table _path as
select (
'{"entries":[{"url":"s3://bucket/customer' ||
getdate()::date ||
'.txt", "mandatory":true}]}'
)::varchar(255)
;
unload ('select * from _path') to 's3://bucket/customer.manifest'
credentials '' parallel off
;
copy customer from 's3://bucket/customer.manifest000' credentials '' manifest;
请参阅http://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html和http://docs.aws.amazon.com/redshift/latest/dg/loading-data-files-using-manifest.html。
答案 1 :(得分:0)
我的实验表明, FROM 参数需要是单个字符串,而不是计算值。因此,不可能做这样的事情:
copy customer
from 's3://mybucket/customer' + CURRENT_DATE
credentials '<aws-auth-args>';
您需要在发送到Redshift之前计算字符串,通过您用于触发COPY
命令的任何系统。
另一种类似的方法是使用包含要加载的文件列表的manifest file。这在许多文件存储在给定目录中并且只需要加载一些文件的情况下非常有用。它还避免了关于哪些文件包含在加载中的混淆。