Athena 子查询和 LEFT JOIN 数据扫描优化

Athena sub-query and LEFT JOIN data scanned optimization

有一个 table 的 parquet 数据格式为 20 GB,简单查询仅扫描 1GB 数据即可给出结果。 select columns from table1 where id in (id1, id2, idn)

如果使用子查询执行相同的查询,例如 - select columns from table1 where id in (select id from table2 limit n) 此查询将通过扫描 20GB 给出结果,整个 table.Even n 是非常小的数字,如 10、50 或 5000。

LEFT JOIN 也会发生同样的情况。

SELECT table1.* FROM
table2 LEFT JOIN table1
ON table2.id=table1.id 

有没有办法通过 运行 单个查询而不是获取和保存子查询的结果并将其作为参数传递给另一个查询来实现? 当前用户如何在 Athena 上运行 LEFT JOIN 或子查询而无需完整 table 扫描的任何最佳实践?

类似问题- Question -1, Question -2

Is there a way to achieve this by running single query instead of fetch and save result of sub-query and pass as args into another query?

"Dynamic filtering" 最常涵盖这一点。 目前没有办法做到这一点。

A​​thena 基于 Presto,Presto 尚不支持动态过滤,但可能会在下一个版本 (Presto 321) 中支持。您可以在此处跟踪问题:https://github.com/prestosql/presto/issues/52

Athena is based on Presto 0.172 currently,还需要升级