2013-04-24 2 views
2

하이브에있는 하나의 열이있는 하나의 더 긴 테이블을 만들기 위해 여러 테이블의 변수 하나 (예 : 행 바인드, 연결)를 추가하려고합니다. 이 질문 (HiveQL UNION ALL)을 기반으로 UNION ALL을 사용하여 가능하다고 생각하지만이 작업을 수행하는 효율적인 방법은 확실하지 않습니까?UNION ALL을 사용하여 Hive에서 여러 테이블을 결합 하시겠습니까?

의사 코드는 다음과 같이 보일 것입니다 :

CREATE TABLE tmp_combined AS 
SELECT b.var1 FROM tmp_table1 b 
UNION ALL 
SELECT c.var1 FROM tmp_table2 c 
UNION ALL 
SELECT d.var1 FROM tmp_table3 d 
UNION ALL 
SELECT e.var1 FROM tmp_table4 e 
UNION ALL 
SELECT f.var1 FROM tmp_table5 f 
UNION ALL 
SELECT g.var1 FROM tmp_table6 g 
UNION ALL 
SELECT h.var1 FROM tmp_table7 h; 

어떤 도움에 감사드립니다!

답변

14

은 ... 다음 코드로 문을

Select * into tmp_combined from 
(
    SELECT b.var1 FROM tmp_table1 b 
    UNION ALL 
    SELECT c.var1 FROM tmp_table2 c 
    UNION ALL 
    SELECT d.var1 FROM tmp_table3 d 
    UNION ALL 
    SELECT e.var1 FROM tmp_table4 e 
    UNION ALL 
    SELECT f.var1 FROM tmp_table5 f 
    UNION ALL 
    SELECT g.var1 FROM tmp_table6 g 
    UNION ALL 
    SELECT h.var1 FROM tmp_table7 h 
) CombinedTable 

사용을 시도해보십시오 세트 hive.exec.parallel = 사실

이 동시에 그렇지 않으면 단계적으로 될 것입니다 서로 다른 선택을 실행합니다.

1

필자는 코드에 행 바인딩을 사용하는 것이 간단하고 효율적인 방법이라고 생각합니다. 당신이 직접 의사 코드를 삽입하는 경우 Btw는 , 그것은 당신에게 몇 가지 구문 오류가 발생할 수 있습니다, 당신이 시도 할 수 있습니다 :

create table join_table as select * from (select ... join all select join all select...) tmp;

1

나는 동일한 개념을했지만 당신을 도울 수있는 다른 테이블 employeelocation 위해 저는 믿습니다 :

별명 ab
DATA:Table_e-employee 
empid empname 
13 Josan 
8 Alex 
3 Ram 
17 Babu 
25 John 

Table_l-location 
empid emplocation 
13 San Jose 
8 Los Angeles 
3 Pune,IN 
17 Chennai,IN 
39 Banglore,IN 

hive> SELECT e.empid AS a ,e.empname AS b FROM employee e 
UNION ALL 
SELECT l.empid AS a,l.emplocation AS b FROM location l; 

출력 :

13 San Jose 
8 Los Angeles 
3 Pune,IN 
17 Chennai,IN 
39 Banglore,IN 
13 Josan 
8 Alex 
3 Ram 
17 Babu 
25 John