在AWS Athena上,我尝试使用WITH子句重用计算数据,例如
WITH temp_table AS (...)
SELECT ...
FROM temp_table t0, temp_table t1, temp_table t2
WHERE ...
如果查询速度很快,“扫描的数据”就会非常快。就好像每次在
temp_table
子句中引用时都会计算 FROM
一样。
如果我单独创建临时表并在查询中多次使用它,我不会看到问题。
有没有一种方法可以真正多次重用子查询而不会造成任何损失?
您可以使用 CTAS (https://docs.aws.amazon.com/athena/latest/ug/ctas.html) 创建临时表,而不是使用 WITH。临时表可以使用 Parquet 格式作为示例,这可以减少接下来的查询中扫描的数据(假设它们不使用所有列)。它还可以防止大量内存消耗,从而可能导致“查询耗尽”错误