【发布时间】: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 -1、Question -2
【问题讨论】:
-
您要在此处优化的实际查询是什么?
-
@TimBiegeleisen 不是查询,而是在任何子查询和 LEFT JOIN 中扫描的数据大小。
标签: presto amazon-athena trino