【发布时间】:2020-09-04 18:36:11
【问题描述】:
主要问题:
我似乎无法找到关于 $path 在 Athena 的 where 子句中使用时如何工作的确切信息。
select * from <database>.<table> where $path = 'know/path/'
给定存储桶顶层的表定义,如果没有指定分区但存储桶是使用前缀组织的,它会扫描整个表吗?或者它是否以类似于分区的方式将扫描限制在指定路径?有没有关于这方面的官方声明的参考?
具体案例:
我有信息存储在s3中,这个信息需要每天统计查询一两次,前缀是两个不同的ID(s3:bucket/IDvalue1/IDvalue2/),然后是相关数据的文件。在给定的一天,可能会创建任意数量的新文件夹(在繁忙的日子可能是数万天)或将新文件添加到现有前缀中。因此,更新分区目录似乎有点复杂。
一种避免分区的建议方法是在从已知的 ID 组合获取数据时使用 $path,但我似乎无法确定使用这种方法是否实际上会限制每个查询扫描的数据量。我读了一条评论说它没有,但我在文档中找不到它,我想知道是否有人知道它是如何工作的并且可以指出正确的参考。
到目前为止,谷歌搜索和阅读文档并没有澄清这一点。
【问题讨论】:
-
我建议通过运行查询来简单测试它,并将 Athena 中显示的扫描数据与 S3 存储桶的整体大小进行比较。
-
@PhilippJohannis 你是对的,我测试过了,它不限制扫描的数据
标签: amazon-web-services amazon-s3 amazon-athena