2013-04-24 5 views
2

Я пытаюсь добавить одну переменную из нескольких таблиц вместе (aka row-bind, concatenate), чтобы сделать одну более длинную таблицу с одним столбцом в Hive. Я думаю, что это возможно, используя UNION ALL по этому вопросу (HiveQL UNION ALL), но я не уверен, что это эффективный способ сделать это?Объединить множество таблиц в Улье с помощью UNION ALL?

псевдокод будет выглядеть примерно так:

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

Я сделал то же самое понятие, но и для разных таблиц employee и location, которые могли бы помочь вам, я верю:

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; 

выход с псевдонимом a и b:

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