AWS Redshift Copy命令动态源文件路径

时间:2016-07-31 01:42:24

标签: copy amazon-redshift

有没有办法将current_date传递给S3路径的复制命令

for ex:在AWS Redshift中复制来自&s 39 / rootlocation / _current_date _ / * .txt的tablename

2 个答案:

答案 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.htmlhttp://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。这在许多文件存储在给定目录中并且只需要加载一些文件的情况下非常有用。它还避免了关于哪些文件包含在加载中的混淆。