如何在加载文件后清理AWS Firehose使用的S3文件?

时间:2017-09-14 00:05:11

标签: amazon-web-services amazon-redshift amazon-kinesis-firehose

AWS Firehose在将数据复制到redshift之前将S3用作间歇存储。将数据传输到redshift后,如果成功,如何自动清理它们。

我手动删除了这些文件,它出了状态抱怨文件被删除了,我不得不删除并再次重新创建Firehose以恢复。

使用S3规则在7天后删除这些文件会有效吗?或者是否有任何自动化方式,Firehose可以删除已移至红移的成功文件。

2 个答案:

答案 0 :(得分:1)

完成加载目标表后,执行类似的操作(下面的代码片段是shell脚本的典型代码):

aws s3 ls $aws_bucket/$table_name.txt.gz
    if [ "$?" = "0" ]
    then
            aws s3 rm $aws_bucket/$table_name.txt.gz
    fi

这将检查你刚刚加载的表是否存在于s3上并将丢弃它。将其作为cronjob的一部分执行。

如果您的ETL / ELT不是递归的,您可以在脚本末尾写下此代码段。在填充表格后,它将删除s3上的文件。但是,在执行此部件之前,请确保已填充目标表。

如果ETL / ELT是递归的,您可以将它放在脚本开头的某处,以检查并删除在上一次运行中创建的文件。这将保留创建的文件直到下一次运行,并且应该首选,因为文件将在最后一次加载失败时充当备份(或者您需要最后一次加载的平面文件用于任何其他目的)。

答案 1 :(得分:1)

与支持AWS讨论,

确认在24小时后删除这些中间文件或最大重试时间是安全的。

在S3 Bucket上自动删除的生命周期规则应解决问题。

希望它有所帮助。