【问题标题】:Athena sub-query and LEFT JOIN data scanned optimizationAthena 子查询和 LEFT JOIN 数据扫描优化
【发布时间】:2020-02-04 17:57:57
【问题描述】:

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

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

LEFT JOIN 也是如此。

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

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

类似问题-Question -1Question -2

【问题讨论】:

  • 您要在此处优化的实际查询是什么?
  • @TimBiegeleisen 不是查询,而是在任何子查询和 LEFT JOIN 中扫描的数据大小。

标签: presto amazon-athena trino


【解决方案1】:

有没有办法通过运行单个查询而不是获取和保存子查询的结果并将作为参数传递给另一个查询来实现这一点?

这在“动态过滤”中最常见。 目前没有办法做到这一点。

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

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

【讨论】:

    猜你喜欢
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 2015-09-23
    相关资源
    最近更新 更多