Redshift 卸载到 S3 位置,它是一个连接字符串
Posted
技术标签:
【中文标题】Redshift 卸载到 S3 位置,它是一个连接字符串【英文标题】:Redshift Unload to S3 Location that is a Concatenated String 【发布时间】:2017-03-22 12:01:16 【问题描述】:我正在尝试将 redshift 查询的结果卸载到昨天日期的存储桶文件夹。
所以在下面的例子中,数据应该在 s3://mybucket/reporting/20170321/myreport-000
unload ('select * from #my_report')
to 's3://mybucket/reporting/' || replace(trunc(current_date - 1),'-','') || '/myreport'
credentials 'aws_access_key_id=key;aws_secret_access_key=secretkey'
delimiter ','
gzip addquotes null as ''
PARALLEL off
allowoverwrite;
但是我得到了错误
[Amazon](500310) Invalid operation: syntax error at or near "||";
字符串连接不先求值吗?
【问题讨论】:
【参考方案1】:无法动态构建UNLOAD
路径语句。
我可以推荐两种方法:
方法 1: 我建议编写一个 shell 脚本/Python/javascript,您可以在其中创建变量,然后将这些变量传递到连接的语句查询中。 方法二: 或者你可以使用AWS Data Pipeline中的RedshiftCopyActivity
从Redshift复制到S3。输入是 RedshiftDataNode,输出是 S3DataNode,您可以在其中指定 directoryPath 的表达式。
如果我做出了错误的假设,请发表评论,我会重新调整答案。
【讨论】:
可以用 PREPARE/EXECUTE 完成吗? docs.aws.amazon.com/redshift/latest/dg/r_PREPARE.html @systemjack - 据我所知,不。它不能用 PREPARE/EXECUTE 命令完成。必须为准备好的语句发出 EXECUTE 命令,这再次与上述问题相同。以上是关于Redshift 卸载到 S3 位置,它是一个连接字符串的主要内容,如果未能解决你的问题,请参考以下文章
将大型数据集从 Redshift 卸载到 S3 失败并出现 I/O 错误