有一张 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 或子查询的任何最佳实践?