合并两个表的连接中的列

时间:2013-01-11 17:59:20

标签: hive hiveql

我在Hive数据库中有以下表格:

table1:
id  t     X
1   1     a
1   4     a
2   5     a
3   10    a

table2:
id   t    Y
1    3    b
2    6    b
2    8    b
3    15   b

我想将它们合并成一个像:

的表格
id   t    Z
1    1    a
1    3    b
1    4    a
2    5    a
2    6    b
2    8    b
3    10   a
3    15   b

基本上我想做的是:

  1. id上的联接(该部分很简单)

  2. 将列table1.ttable2.t合并到一个新列t

  3. 如果相应的Z来自table1.X,则变量t等于table1.ttable2.Y来自table2.t {1}}

  4. id排序,然后按t排序(不应该太难)

  5. 我不知道如何处理第2部分和第3部分。我尝试使用外连接     table1.id = table2.id and table1.t = table2.t,但它不合并两列t

    任何指针都会受到赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个。它将在表3中插入来自其他2个表的所有值

INSERT INTO table3(t,Z) SELECT t,X FROM table1 UNION ALL SELECT t,Y FROM table2

答案 1 :(得分:1)

CREATE TABLE table3 as SELECT * FROM (SELECT id,t,X as Z FROM t3_1 UNION ALL SELECT id,t,Y as Z FROM t3_2) u1 order by id,t;

尽管并非总是需要,但使用联合查询的子查询有助于组织,此外,您可以在查询的其他部分引用联合中的字段(例如u1.id)。

您需要第3列上的别名才能使模式匹配。如果源表名称不是列,则可以执行以下操作:

select * from (select id,t,'a' from t3_1 UNION ALL select id,t,'b' from t3_2) u1;