Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 两个表中字段的HQL并集_Hadoop_Hive - Fatal编程技术网

Hadoop 两个表中字段的HQL并集

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

我对蜂巢非常陌生,对蜂巢有着非常基本的了解,所以请原谅我的愚蠢:

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

我有两张桌子:

表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个查询如下:

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,因此必须提供别名。