你可以使用Apache Hive集运算符将两个或多个SELECT语句中的相似数据集合并成一个结果集。其中每个select的数据集中的类型必选一样。否则,你必须使用类型转换函数显式转换类型。
Hadoop Hive 目前支持如下集合运算符。
UNION [DISTINCT]
UNION ALL
1.2.0之前的Hive版本只支持UNION ALL(bag union),其中重复的行不会被消除。从1.2.0版本开始,Hive包含了可选的ALL关键字。
以下是Hive UNION和UNION ALL集运算符的语法。
select Statement
{ UNION [DISTINCT] | UNION [ ALL ] }
select Statement;
现在,我们来简单检查一下Hive UNION和UNION ALL。
UNION集操作将两个或多个类似子查询的结果合并成一个结果集,该结果集包含所有SELECT语句返回的行。试图组合的列的数据类型应该匹配。Hive的UNION集操作与JOIN不同,JOIN是将两个表中的列组合起来。
UNION集操作会从结果集中删除重复的记录。
下面的例子演示了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与DISTINCT关键字。例如,考虑以下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)
UNION ALL集操作将两个或多个类似子查询的结果合并成一个结果集,该结果集包含所有SELECT语句返回的行。试图组合的列的数据类型应该匹配。
UNION ALL集操作不会从结果集中删除重复的记录。
下面的例子演示了Hive UNION ALL集的操作。
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 ALL会保留重复的记录。
目前Hive不支持以下的集合操作。
INTERSECT [DISTINCT]
EXCEPT [DISTINCT] or MINUS [DISTINCT]
内容来源于网络,如有侵权,请联系作者删除!