2017-02-16 5 views
1

질문은 this과 비슷합니다. 하나의 쿼리에서이를 수행 할 수 있는지 알고 싶습니다. 이것은 내가 일하는 것입니다 만, 우리 모두 조인은 비싸다는 것을 알고 있습니다. 이 일을 더 잘하는 hql?하이브 쿼리 최적화를 피하십시오.

select a.tbl1,b.tbl2 
from 
(
    select count(*) as tbl1 from tbl1 
) a 
join 
(
    select count(*) as tbl2 from tbl2 
) b ON 1=1 
+0

비용이 0이 아니라 두 레코드 간 교차 결합이 얼마나 비쌀 수 있다고 생각하십니까? –

+0

@DuduMarkovitz 계산과 오버 헤드의 비용 사이에는 혼란이 있다고 생각합니다. –

답변

2

당신이 당신이 행 형식에서 작동하도록 UNION 모든 작업을 사용할 수있는 별도의 열로을 유지하는 중요하지 않은 경우 :

select 'tbl1', count(*) from tbl1 
UNION ALL 
select 'tbl2', count(*) from tbl2; 

이것은 당신이 추가 MAPJOIN 연산자를 방지 할 수 있도록 할 당신의 이전 쿼리. 기술적으로 최종 실행 계획에 하나의 매퍼를 사용할 수 있습니다. 이러한 작업은 이전 작업에서 최적화 할 것처럼

업데이트 하둡의 분포는 UNION 또는 MAP 중 하나를가는 성능 관점에서 많은 차이점을받지 않습니다 최신에서

은 접근 가입하세요. 그러나 클러스터의 이전 버전이나 일부 구성 등록 정보를 기반으로 MAPJOIN을 별도의 작업으로 변환 할 수 있다는 점에 유의하십시오. 이 일반적으로 당신이 서로 일치해야 여러 테이블에서 많은 기록을 가지고있는 상황을 의미, 비용이 조인 상기하면

+0

필요할 경우 나중에 한 열로 이동하기 위해 열을 조 변경 할 수 있습니다. –

+0

@AshishSingh 그는 조바꿈을 사용할 수 있지만 필요한 경우 잘 모르겠습니다. Hive는이 작업을이 작업을 다른 작업으로 변환 할 수 있습니다.이 특정 작업에 대한 오버 헤드가 될 수 있습니다. – Alex

+0

실제로 가정을 확인 했습니까? 'UN ALL '은 당신이 여분의 일을 피하지 않는다는 것을 의미하는'MAP' 일을 포함하는 것으로 보인다. –

2

예, 조인은

비싸다.

이 설명에 따르면 합계가 비싸지 않습니다. 각 세트당 2 세트 만 참가할 수 있습니다. 당신이

오버 헤드보고해야

하지만, 아마도 당신은 개별 계산하면 계산하고 결과를 결합하는 데 사용하는 명령보다 훨씬 짧은 걸릴 것을 알 수 있습니다. 이는지도 및 작업 감소에 상당한 오버 헤드가 발생하기 때문입니다 (스테이지 당 30 초가 될 수 있음).

오버 헤드가 많이 발생하지 않는 계획을 세웠는지보기 위해 조금 놀아도 좋지만 하이브가 잘 확장되지 않았기 때문에 운이 좋지 않을 수도 있습니다.