2017-11-07 4 views
2
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 단서, 지금 현재로임팔라의 절 또는 절은 한 번만 계산되고 쿼리에서 여러 번 사용됩니까?

답변

3

을 찾을 수 없습니다 그것을 tmp_1과 tmp_2에서 참조하십시오.

쿼리의 EXPLAIN PLAN에서 확인할 수 있습니다.

결론은 복잡한 쿼리의 디버깅 및 유지 관리 기능 향상을 위해 WITH 절을 사용할 수 있다는 것입니다. 하이브 또는 임팔라 쿼리의 성능을 높이는데 도움이되지 않습니다. Hive JIRA 사이트에 따르면이 재귀 적 기능을 포함하는 경로 맵은 없습니다.

Oracle과 PostgreSQL은이 재귀 적 기능을 지원합니다.

+0

감사합니다. –