Hadoop 两个表中字段的HQL并集
我对蜂巢非常陌生,对蜂巢有着非常基本的了解,所以请原谅我的愚蠢: 下面的数据只是我试图做的一个例子,实际数据非常庞大 我有两张桌子: 表A id1名称来源 101 aa SAP 102 bb SAP 103毫升SAP 表B id2名称源 106 zz SAP 107 yy SAP 108 xx SAP 我需要用schema创建另一个表C id Name Strorage 表A和表B中的所有ID和名称,以及另一列“存储”,必须用“HDFS”硬编码 我需要像这样的输出: id name Strorage 101 aa HDFS 102 bb高密度光纤 103立方厘米高密度光纤 106 zz高密度光纤 107 yy HDFS 108 xx HDFS 我尝试了许多查询,但其中1个查询如下:Hadoop 两个表中字段的HQL并集,hadoop,hive,Hadoop,Hive,我对蜂巢非常陌生,对蜂巢有着非常基本的了解,所以请原谅我的愚蠢: 下面的数据只是我试图做的一个例子,实际数据非常庞大 我有两张桌子: 表A id1名称来源 101 aa SAP 102 bb SAP 103毫升SAP 表B id2名称源 106 zz SAP 107 yy SAP 108 xx SAP 我需要用schema创建另一个表C id Name Strorage 表A和表B中的所有ID和名称,以及另一列“存储”,必须用“HDFS”硬编码 我需要像这样的输出: id name Strora
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行1:53无法识别表达式规范中“select”*“from”附近的输入”
我不确定我尝试的查询是否正确,请帮我解决这个问题
谢谢看起来(第一个)语法问题出现在insert中,而不是union查询中。像这样的方法应该会奏效:
insert into table c select id, name, 'HDFS' from (
select * from (select id1, name from A union select id2, name from B));
以下是工作查询:
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来模拟必须使用distinct的union
当字段名称不同时,您必须尝试以下操作:
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;
非常感谢您的回复,先生:但我收到的错误是:ParseException行3:80无法识别子查询Source中“')''”附近的输入谢谢您的回复,先生。我尝试了此操作,但得到的错误是:“SemanticException[error 10004]:第5:22行无效的表别名或列引用“id1”:(可能的列名为:id2,name)'当我在子查询中将其更改为'id2'时,我得到了错误'SemanticException TOK_ALLCOLREF在当前上下文中不受支持'SemanticException在进行必要的修改后使用的最终查询是什么?另外,粘贴两个子查询中所有3个表列名的DDL需要相同。由于a中有id1,b中有id2,因此必须提供别名。