我每天晚上都会创建一些汇总数据并存储在 S3 存储桶中,按日期分区。我执行 anALTER TABLE foo ADD PARTITION...
在创建时将每个新分区添加到 Athena。我已经能够验证这是否成功添加了数据,并且我可以在 Athena 中查询它。到目前为止,一切都很好。
我现在想做的是自动滚动超过 30 天的数据。我可以设置一个生命周期规则来从 S3 中删除旧数据;这也会自动将其从 Athena 中删除,还是我需要在 Athena 本身中直接采取措施将其从表中删除?
当我简单地删除 S3 中的分区时,它似乎可以正常工作,但我找不到任何明确的说法,表明这是处理此问题的推荐方法。
IIRC 我们每晚使用Glue Crawler重新扫描 S3 并重新创建 Athena 表。不是 100% 确定是否需要,也许不需要。虽然不疼:)
经过一些实验后,Athena不会删除对由 S3 操作删除的对象的引用,或者至少不会立即删除——“最终一致性”可能会在某个时候解决问题,但如果您希望它在短时间内发生术语你需要自己做。如果您真的希望它们消失,您必须使用这些
ALTER TABLE
分区。DROP
我通过以不同名称多次上传文件并删除除一个以外的所有文件来验证这一点。查询显示
COUNT(*)
,在删除后几分钟内,Athena 仍然可以看到这些记录,但DROP PARTITION
/ADD PARTITION
操作立即清除了它们。因此,我不会指望常规的 S3 生命周期管理来照顾 Athena。
看看这个页面。它向您展示了如何使用 BOTO3 或 CLI 批量过滤和删除分区。
如前所述,从 s3 中删除文件不会将它们从 Glue 目录元数据中删除。从胶水中去除它们也不会从 S3 中去除它们。这两个操作必须独立完成。