立即评估CTE

时间:2017-11-06 09:26:49

标签: hadoop impala cloudera-cdh

我正在尝试优化包含多个CTE的非常长且复杂的impala查询。每个CTE多次使用。我的期望是,一旦创建了CTE,我应该能够直接指示这个CTE的结果应该在主查询中重复使用,而不是使用主查询再次对CTE中涉及的表进行SCAN HDFS操作。这可能吗?如果是的话怎么样?

我正在使用impalad版本2.1.1-cdh5 RELEASE(build 7901877736e29716147c4804b0841afc4ebc9037)版本

2 个答案:

答案 0 :(得分:3)

我不这么认为。我相信WITH子句不会创建任何永久对象,它只是为了避免使用新表或视图混淆命名空间,并通过reor-更容易重构大型复杂查询 去除和更换他们的个别部分。 WITH子句中使用的查询是有朝一日成为视图或在ETL过程中实现为汇总表的良好候选者。

答案 1 :(得分:2)

  

这可能吗?

CTE的目的是通过以下查询(例如 CREATE TABLE #TEMP ( Category VARCHAR(200), YEAR1 NUMERIC, Total MONEY ) INSERT INTO #TEMP SELECT 'beverages', 1996, 500 union SELECT 'beverages', 1997, 750 union SELECT 'Condiments', 1997, 1000 union SELECT 'Condiments', 1996, 800 SELECT * FROM ( SELECT Category,YEAR1, Total FROM #TEMP ) AS SourceTable PIVOT ( AVG(Total) FOR YEAR1 IN ( [1996], [1997]) ) AS PivotTable; )重用前面的查询(使用with子句)获得的结果。所以我不明白为什么不可能的原因。

在查询中使用SELECT以查找实际的SCAN HDFS详细信息。

要获得更多与I / O相关的洞察,请使用Explain,如官方文档https://www.cloudera.com/documentation/enterprise/5-7-x/topics/impala_explain_plan.html#perf_profile