处理 not needed/old/stale AWS Athena 分区的正确方法

Proper way to handle not needed/old/stale AWS Athena partitions

我们遇到过这样一种情况,由于 Athena 的服务限制(每个 table 20,000 个分区),我们需要弄清楚如何处理陈旧的 AWS Athena 分区。

假设我们只希望有一个 table 并每天在那里添加一些分区,这些分区引用一个类似时间戳的路径到位于 S3 上的一些日志(例如:/foo_bucket/logs/year=2019/month=03/day=11/hour=20)。 我们发现这种方法可以让我们在大约 2 年内达到分区限制。之后,我们要清理与之关联的旧日志和分区。

问题:

  1. 如果关联的 S3 路径被删除,分区元数据会发生什么情况?此 S3 存储桶会自动删除旧对象。分区也会自动删除还是会引用不存在的 S3 路径?
  2. 当我们在 S3 自动删除旧对象之前达到每个 table 的分区限制时会发生什么? Athena 会删除旧分区元数据吗?我知道删除分区不会触及 S3 对象数据 ()。

谢谢!

问题 1:

由于元数据和数据在 AWS Athena 中完全没有链接,您将需要调用基本上说 "hey, refresh my table partitions list" 的命令,即 MSCK REPAIR TABLE https://docs.aws.amazon.com/athena/latest/ug/msck-repair-table.html

问题 2:

我认为当 Athena 尝试在 Metastore 中添加新分区时,您会遇到错误,因为旧分区元数据未被删除。

反馈:

也许将旧内容合并到更细粒度的分区中是个不错的主意。例如,您可以保留过去 3 到 4 个月的一天粒度。任何早于此的东西都可以按月存储。这将使您可以在 table.

中保留更多内容

希望对您有所帮助:)