删除 Athena 表中的旧分区

删除 Athena 表中的旧分区

我有一些每晚都会创建的汇总数据,并按日期分区存储在 S3 存储桶中。我执行一个命令,ALTER TABLE foo ADD PARTITION...将每个新分区添加到 Athena 中。我已经能够验证这是否成功添加了数据,并且我可以在 Athena 中查询它。到目前为止一切顺利。

我现在想要做的是让超过 30 天的数据自动滚动。我可以设置一个生命周期规则来从 S3 中删除旧数据;这也会自动将其从 Athena 中删除吗?还是我需要在 Athena 中直接采取行动将其从表中删除?

当我简单地删除 S3 中的分区时,它似乎按我预期的方式工作,但我找不到任何明确的证据表明这是处理此问题的推荐方法。

答案1

IIRC我们使用胶水爬行器每晚重新扫描 S3 并重新创建 Athena 表。不确定是否需要,也许不需要。不过这没什么坏处 :)

答案2

经过一些实验,雅典娜将不会删除对 S3 操作删除的对象的引用,或者至少不是立即删除——“最终一致性”可能会在某个时候修复该问题,但如果您期望它在短期内发生,则需要自己动手。如果您真的希望它们消失,则必须使用分区ALTER TABLEDROP

我通过多次以不同名称上传文件并删除除一个之外的所有文件来验证这一点。查询COUNT(*)显示,删除后几分钟内 Athena 仍可看到这些记录,但DROP PARTITION/ADD PARTITION操作会立即清除它们。

因此,我不会依赖常规的 S3 生命周期管理来照顾 Athena。

答案3

查看这一页. 它向您展示如何使用 BOTO3 或 CLI 批量过滤和删除分区。

如上所述,从 s3 中删除文件并不会将其从 Glue 目录元数据中删除。同样,从 Glue 中删除文件并不会将其从 S3 中删除。这两个操作必须独立完成。

相关内容