cte的即时评估

6vl6ewon  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(327)

我试图优化一个非常长且复杂的impala查询,它包含多个cte。每个cte使用多次。我的期望是,一旦创建了一个cte,我应该能够指示impala在主查询中重新使用这个cte的结果,而不是用主查询再次扫描cte中涉及的表上的hdfs操作。这可能吗?如果是,怎么做?
我使用的是impalad版本2.1.1-cdh5发行版(build 7901877736e29716147c4804b0841afc4ebc9037)版本

ego6inou

ego6inou1#

我不这么认为。我相信with子句不会创建任何永久性对象,它只是为了避免新表或视图将名称空间弄乱,并通过重新排序和替换单个部分使重构大型复杂查询更容易。with子句中使用的查询很适合将来成为视图,或者在etl过程中具体化为摘要表。

46scxncf

46scxncf2#

这可能吗?
cte的真正目的是重用从前面的查询(使用 with 子句)通过下面的查询, SELECT . 所以我不明白为什么不可能。
使用 Explain 您的查询,以找出实际扫描hdfs的详细信息。
有关更多与i/o相关的细节,请使用 profile 如官方文件所示https://www.cloudera.com/documentation/enterprise/5-7-x/topics/impala_explain_plan.html#perf_profile

相关问题