看到或使用impala的子句只计算一次并在查询中多次使用?

时间:2017-11-07 01:43:19

标签: impala

with core as (
select
    t1.a,
    t1.b,
    t2.c
from
    test_1 t1
join
    test_2 t2 on t1.a = t2.a
where
    t1.b = 'test' 
)
,tmp_1 as (
select a,count(1) from core group by a
)
,tmp_2 as (
select b,count(1) from core group by b
)
select
    t1.a,
    t1.count,
    t2.count
 from
     tmp_1 t1
 join
     tmp_2 t2 on t1.a=t2.b

我的问题是,上面查询中的core CTE只计算一次吗?在tmp_1tmp_2 CTE两次或两次,我都找不到documentation of impala中的线索,

1 个答案:

答案 0 :(得分:5)

截至目前,使用现有版本的Impala和Hive, 查询中的核心CTE将被计算2次,正如您在tmp_1和tmp_2中所引用的那样。

您可以在查询的EXPLAIN PLAN中观察它。

结论是,您可以使用WITH子句来更好地调试和维护复杂查询。它对提高Hive或Impala查询的性能没有帮助。根据Hive JIRA站点,没有路由映射可以包含此递归功能。

Oracle和PostgreSQL支持这种递归功能。