在 AWS Athena 中重用子查询会生成大量扫描数据

use*_*094 6 subquery presto amazon-athena

在 AWS Athena 上,我尝试使用 WITH 子句重用计算数据,例如

WITH temp_table AS (...)
SELECT ...
FROM temp_table t0, temp_table t1, temp_table t2
WHERE ...
Run Code Online (Sandbox Code Playgroud)

如果查询速度很快,“扫描的数据”就会通过屋顶。temp_table每次在FROM子句中引用时都会计算if 。

如果我单独创建一个临时表并在查询中多次使用它,我看不到问题。

有没有办法真正多次重用子查询而不会受到任何惩罚?

Ori*_*i N 0

您可以使用 CTAS ( https://docs.aws.amazon.com/athena/latest/ug/ctas.html ) 而不是使用 WITH创建临时表。临时表可以使用 Parquet 格式作为示例,这可以减少接下来的查询中扫描的数据(假设它们不使用所有列)。它还可以防止大量内存消耗,从而导致“查询耗尽”错误