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_1
和tmp_2
CTE两次或两次,我都找不到documentation of impala中的线索,
答案 0 :(得分:5)
截至目前,使用现有版本的Impala和Hive, 查询中的核心CTE将被计算2次,正如您在tmp_1和tmp_2中所引用的那样。
您可以在查询的EXPLAIN PLAN中观察它。
结论是,您可以使用WITH子句来更好地调试和维护复杂查询。它对提高Hive或Impala查询的性能没有帮助。根据Hive JIRA站点,没有路由映射可以包含此递归功能。
Oracle和PostgreSQL支持这种递归功能。