tot*_*rio 5 amazon-s3 amazon-web-services amazon-redshift
当我运行此 COPY 命令时:
COPY to_my_table (field1, field2, etc)
FROM s3://my-service-f55b83j5vvkp/2018/09/03
CREDENTIALS 'aws_iam_role=...'
JSON 'auto' TIMEFORMAT 'auto';
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
The specified S3 prefix '2018/09/03' does not exist
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为我的 S3 存储桶在该特定前缀中没有任何文件。然而,这是加载数据的日常工作的一部分,有时需要加载一些东西,但有时却没有任何东西可以加载。
我检查了COPY 文档,似乎没有任何方法可以避免该错误,并且如果该前缀下没有对象,则不执行任何操作。也许我错过了什么?
我想在这里建议,我们如何在我们的案例中解决这个问题,虽然它的解决方案很简单,但可能对其他人有帮助。乔恩·斯科特在评论中提出了我喜欢的好选择。但是,不幸的是,在我们的例子中,我们无法这样做,因为向 S3 添加文件的系统不在我们的控制范围内。所以不确定这是否也是你的情况。我认为您可以通过多种方式解决您的问题,但我建议以下两种选择。
1)由于您可能正在运行 cron 作业来将数据加载到 Redshift,因此在执行命令之前检查文件是否存在Copy,如下所示。
path=s3://my-service-f55b83j5vvkp/2018/09/03
count=\`s3cmd ls $path | wc -l\`
if [[ $count -eq 1 ]]; then
//Your Redshift copy code goes here.
else
echo "Nothing to load"
fi
Run Code Online (Sandbox Code Playgroud)
此选项的优点是您可以节省一些成本,尽管可能完全可以忽略不计。
2)没有记录的虚拟文件,最终不会将任何数据加载到 Redshift。
| 归档时间: |
|
| 查看次数: |
3757 次 |
| 最近记录: |