Hive Set操作符:UNION和UNION ALL

x33g5p2x  于2020-11-16 发布在 Hive  
字(1.4k)|赞(0)|评价(0)|浏览(1674)

您可以使用Apache Hive set操作符将来自两个或多个SELECT语句的类似数据集合并到单个结果集。这里的相似数据集字面上的意思是,结果集的数据类型完全匹配。否则,必须使用类型转换函数显式转换类型。

Apache Hive Set操作符:UNION和UNION ALL

Hive Set操作符
Hadoop Hive支持以下集合操作符。

UNION [DISTINCT]
UNION ALL

Hive 1.2.0之前的版本只支持UNION ALL (bag UNION),在这种情况下重复的行不会被消除。从1.2.0版本开始,Hive包含可选的ALL关键字。

Hive UNION和UNION基本语法

select Statement
{ UNION [DISTINCT] | UNION [ ALL ] } 
select Statement;

现在,让我们简要检查一下Hive UNION和UNION。

Hive UNION Set操作符

UNION set操作将两个或多个类似子查询的结果合并到一个结果集,该结果集包含所有SELECT语句返回的行。要合并的列的数据类型应该匹配。Hive UNION集合操作不同于JOIN,后者将来自两个表的列合并在一起。
UNION集操作从结果集中删除重复行。
Set操作符的例子
下面的例子演示了Hive UNION集合操作。

select * from test1 
union 
select * from test2;

+-----------+-----------+--+
| _u2.col1  | _u2.col2  |
+-----------+-----------+--+
| 1         | 1         |
| 1         | 2         |
| 2         | 2         |
| 2         | 3         |
| 3         | 3         |
| 4         | 4         |
+-----------+-----------+--+
6 rows selected (2.023 seconds)

您也可以使用带有不同关键字的UNION。例如,考虑下面的Hive查询。

select * from test1 
union distinct 
select * from test2;

+-----------+-----------+--+
| _u2.col1  | _u2.col2  |
+-----------+-----------+--+
| 1         | 1         |
| 1         | 2         |
| 2         | 2         |
| 2         | 3         |
| 3         | 3         |
| 4         | 4         |
+-----------+-----------+--+
6 rows selected (11.873 seconds)

Hive UNION ALL Set操作符

UNION ALL set操作将两个或多个类似子查询的结果合并到一个结果集,该结果集包含所有SELECT语句返回的行。要合并的列的数据类型应该匹配。
UNION ALL set操作不会从结果集中删除重复行。
下面的例子演示了Hive UNION的ALL set操作。

select * from test1 
union all 
select * from test2;

+-----------+-----------+--+
| _u1.col1  | _u1.col2  |
+-----------+-----------+--+
| 1         | 1         |
| 2         | 2         |
| 3         | 3         |
| 1         | 2         |
| 2         | 3         |
| 4         | 4         |
| 1         | 1         |
+-----------+-----------+--+
7 rows selected (1.178 seconds)

注意,UNION会保存所有重复的记录。

Hive中不支持的Set操作符

到目前为止,Hive中还不支持以下集合操作。

INTERSECT [DISTINCT]
EXCEPT [DISTINCT] or MINUS [DISTINCT]

相关文章