2013-11-01 5 views
1

같은 테이블에서 데이터를 쿼리하지만 다른 그룹별로 각 그룹의 데이터를 쿼리하는 쿼리가 두 개있는 경우. 그런 다음 두 개의 분리 된 쿼리를 사용하거나 union all 함수를 사용해야합니까? 내 관심사는 성능에 관한 것입니다. 왜냐하면 어떤 사람들은 union all이 필요하지 않다면 피해야한다고 말했기 때문에 큰 오버 헤드가되었습니다.하이브 유니온 모든 성능

예를 들어 아래 질문에 UNION ALL을 사용해야합니까? 제발 조언. 감사.

INSERT INTO TABLE newtable 
SELECT SUBSTRING(A1, 1, 7) AS col1, COUNT(DISTINCT B) AS col2, C AS col3 
FROM oldtable 
GROUP BY SUBSTRING(A1, 1, 7), C; 

INSERT INTO TABLE newtable 
SELECT A2 AS col1, COUNT(DISTINCT B) AS col2, C AS col3 
FROM oldtable 
GROUP BY A2, C; 

답변

1

부모가 2 대의 MapReduce 작업 인 UNION ALL이 있다고 가정 해 보겠습니다. 각 MapReduce 작업은 임시 파일에 출력을 쓰고 UNION은 임시 파일을 읽고 최종 저장 공간에 씁니다. 결과를 두 번 읽고 읽고 쓰면 결국 낭비가됩니다.

하이브 0.10의 일부로 수행 된 some improvements이 있습니다. 최신 버전을 실행하고 있다면 시도해 볼 수 있습니다.

+0

감사합니다. @Charles. "파일 싱크 (sink sink)"와 "부모 (parent)"가 여기에 무슨 뜻인지에 대한 힌트를 주시겠습니까? – Kevin