【问题标题】:Amazon Athena not returning recent data when partitions are partially loaded分区部分加载时,Amazon Athena 不返回最近的数据
【发布时间】:2019-09-28 13:58:04
【问题描述】:
我定义了一个分区表,它指向一个使用日期分区的 S3 存储桶。我在 S3 存储桶中有过去 3 个月的数据。我已经加载了第一个月的分区。但是,在过去的 2 个月里,我没有使用 msck repair table 或 alter table 命令将数据加载到分区中。当我尝试查询 table 时,过去 2 个月的数据没有从 S3 加载,只有最近的分区数据显示在查询结果中。这是预期的吗?如果有,为什么?
我尝试为同一个 s3 存储桶创建另一个分区表,但这次我没有加载任何分区。当我查询这张表时,我得到了最新的记录。
【问题讨论】:
标签:
amazon-web-services
amazon-s3
amazon-athena
【解决方案1】:
是的,这是预期的。
Athena 使用元数据来识别 S3 中的数据。用于检测 S3 中数据的最重要的元数据是分区。 Athena 在元数据中保留有关所有分区的详细信息。使用此分区信息,它会到达 S3 中的相应文件夹以获取数据。
- 如果您将更多文件添加到同一分区:如果已在 athena 元数据中添加分区,则将自动检测所有新文件,因为 athena 使用分区元数据和 s3 位置从 S3 中的文件夹中读取所有文件。
- 如果您在新分区中添加文件:如果分区不在 athena 元数据中,则 athana 不知道如何在 S3 中找到相应的文件夹。因此,它不会访问该文件夹中的数据。
识别新分区的三种方法:
1. 在 S3 存储桶上运行 Glue 爬虫,它将刷新分区元数据。
2.在athana中使用alter table命令添加新分区
3. 如果您的分区的架构与表架构不同,请使用 msck repair table。