2013-04-24 230 views
2

我试图从几个表中追加一个变量(又名行绑定,串联),使一个更长的表与Hive中的单个列。我认为这是可能的使用UNION ALL基于这个问题(HiveQL 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

我会说这是直接和有效的方式来做行绑定,至少,这就是我在我的代码中使用。 顺便说一句,如果你直接把你的伪代码则可能会导致你一些语法错误,您可以尝试:

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

1

我做了同样的概念,但对于不同的表employeelocation,可以帮助你,我相信:

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; 

输出别名为ab

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