amazon-web-services - 处理不需要/旧/陈旧 AWS Athena 分区的正确方法
问题描述
由于 Athena 的服务限制(每个表 20,000 个分区),我们遇到了需要弄清楚如何处理陈旧 AWS Athena 分区的情况。
假设我们只想拥有一个表并每天在那里添加许多分区,这些分区引用位于 S3 上的一些日志的类似时间戳的路径(例如:)/foo_bucket/logs/year=2019/month=03/day=11/hour=20
。我们发现这种方法可以让我们在大约 2 年内达到分区限制。之后,我们要清理旧日志和与之关联的分区。
问题:
- 如果删除关联的 S3 路径,分区元数据会发生什么情况?此 S3 存储桶会自动删除旧对象。分区是否也会被自动删除,还是会引用不存在的 S3 路径?
- 当我们在 S3 自动删除旧对象之前达到每个表的分区限制时会发生什么?Athena 会删除旧的分区元数据吗?我知道删除分区不会触及 S3 对象数据(链接)。
谢谢!
解决方案
问题一:
由于元数据和数据在 AWS Athena 中完全未链接,您需要调用基本上说“嘿,刷新我的表分区列表”的命令,即MSCK REPAIR TABLE https://docs.aws.amazon.com/athena/最新/ug/msck-repair-table.html
问题2:
我认为当 Athena 尝试在元存储中添加新分区时,您会遇到错误,因为旧分区元数据没有被删除。
反馈:
也许将旧内容合并到粒度较小的分区中并不是一个坏主意。例如,您可以保留过去 3 到 4 个月的天粒度。任何比这更早的东西都可以每月存储。这将使您可以在表格中保留更多内容。
我希望它有帮助:)
推荐阅读
- bash - awk 将命令输出插入到变量中
- javascript - 为什么我必须单击两次按钮才能显示文本?
- ruby - 俗气的页面对象动态元素查找器的列表在哪里?
- mysql - 通过连接表满足多个 WHERE 条件
- unity3d - SavedGameRequestStatus.InternalError 谷歌播放服务
- php - PHP 联系表单突然停止工作
- javascript - 如何将键分配给 JavaScript 数组中的现有值
- javascript - Edge 在 mouseleave / mouseenter 上看不到按钮按下
- html - 下拉箭头失败 IE
- sqlite - SQLite 问题:如何在特定行中获取所有不为空的数据?