来自两个表的字段的HQL UNION

时间:2015-12-17 13:06:21

标签: hadoop hive

对蜂巢非常新,对它有非常基本的想法,所以请原谅我,如果它很傻:

下面的数据只是我想要做的一个例子,实际数据非常庞大。

我有两张桌子:

表A

id1名称来源

101 aa SAP

102 bb SAP

103 cc SAP

表B

id2名称来源

106 zz SAP

107 yy SAP

108 xx SAP

我需要使用架构

创建另一个表C.

id Name Strorage

包含表A和B中的所有ID和名称,另一列“Storage”必须使用“HDFS”进行硬编码

我需要输出:

id name Strorage

101 aa HDFS

102 bb HDFS

103 cc HDFS

106 zz HDFS

107 yy HDFS

108 xx HDFS

我尝试了很多查询,但其中1条如下:

insert into table c select (select * from (select id1 from A union select id2 from B)) as id, (select * from (select name from A union select name from B)) as name , 'HDFS' as Strorage;

但是它给出了错误“ParseException line 1:53无法识别表达式规范中'select'''''附近的输入”

我不确定我正在尝试的查询是否正确,请帮助我。

谢谢

2 个答案:

答案 0 :(得分:0)

看起来像(第一个)语法问题在你的插入中,而不是联合查询。这样的事情应该有效:

insert into table c select id, name, 'HDFS' from (
  select * from (select id1, name from A union select id2, name from B));

答案 1 :(得分:0)

以下是工作查询:

insert into table c select distinct * from (select id1, name, 'HDFS' storage from a union all select id1, name, 'HDFS' storage from b) c;

有些版本不支持union,只有union all模拟union你必须使用distinct。

当字段名称不同时,您必须尝试:

insert into table c select distinct * from (select id1, name, 'HDFS' storage from a union all select id2 as id1, name, 'HDFS' storage from b) c;