当我运行此COPY命令时:
COPY to_my_table (field1, field2, etc)
FROM s3://my-service-f55b83j5vvkp/2018/09/03
CREDENTIALS 'aws_iam_role=...'
JSON 'auto' TIMEFORMAT 'auto';
我收到此错误:
The specified S3 prefix '2018/09/03' does not exist
这很有意义,因为我的S3存储桶在该特定前缀中没有任何文件。但是,这是加载数据的日常工作的一部分,有时需要加载某些内容,而有时则无需加载任何内容。
我检查了COPY documentation,似乎没有什么办法可以避免该错误,并且如果该前缀下没有对象,则什么也不做。也许我缺少什么?
答案 0 :(得分:1)
我想在这里建议,我们如何解决此问题,尽管它的解决方法很简单,但可能会对其他人有所帮助。乔恩·斯科特(Jon Scot)在我喜欢的评论中建议了不错的选择。但是,不幸的是,在我们的案例中,我们无法做到这一点,因为向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
此选项的优点是可以节省一些费用,尽管可以完全忽略不计。
2)无记录的伪文件,该文件最终将不会向Redshift加载任何数据。