2020 年末发布的 Athena 2.0 似乎改进了它们的 push_down_predicate 处理以支持子查询。
这是他们来自https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference.html#engine-versions-reference-0002的相关声明
谓词推理和下推——为使用 <symbol> IN <subquery> 谓词的查询扩展了谓词推理和下推。
我对我们自己的 Athena 表的测试表明情况确实如此。我的测试查询大致如下
SELECT *
FROM table_partitioned_by_scrape_date
WHERE scrape_date = (
SELECT max(scrape_date)
FROM table_partitioned_by_scrape_date
)
从查询扫描的字节中,我可以告诉 Athena 确实只扫描了具有最新 scrape_date 的分区。
此外,我还在 JOIN 子句中测试了 push_down_predicate 的支持,其中 join_to 值是另一个查询的结果。即使在发行说明中没有提到,显然 Athena 2.0 现在也足够聪明,可以支持这种情况,并且只扫描最新的 scrape_date 分区。我之前在 Athena 1.0 中测试过类似的查询,它会扫描所有分区。我的测试查询如下
WITH l as (
SELECT max(scrape_date) as latest_scrape_date
FROM table_partitioned_by_scrape_date
)
SELECT deckard_id
FROM table_partitioned_by_scrape_date as t
JOIN l ON t.scrape_date = l.latest_scrape_date