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

How to clean up S3 files that is used by AWS Firehose after loading the files?

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

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

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

一旦你完成加载你的目的地 table,执行类似的东西(下面的片段是 shell 脚本的典型):

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

这将检查您刚刚加载的 table 是否存在于 s3 上并将其删除。将其作为 cronjob 的一部分执行。

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

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

与 AWS 支持人员讨论,

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

在 S3 存储桶上自动删除的生命周期规则应该可以解决这个问题。

希望对您有所帮助。