1

我在 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.Xttable1.ttable2.Ytable2.t

  4. id按顺序排列桌子t(这不应该太难)

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

任何指针将不胜感激。谢谢!

4

2 回答 2

1

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

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

于 2013-01-11T18:16:18.350 回答
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虽然并不总是需要,但使用联合查询的子查询有助于组织,此外,您可以在查询的其他部分引用联合中的字段(例如)。

您需要第三列的别名来使模式匹配。如果源表名称还不是一列,您可以执行以下操作:

select * from (select id,t,'a' from t3_1 UNION ALL select id,t,'b' from t3_2) u1;
于 2013-01-15T02:09:53.683 回答