您可以使用Apache Hive set操作符将来自两个或多个SELECT语句的类似数据集合并到单个结果集。这里的相似数据集字面上的意思是,结果集的数据类型完全匹配。否则,必须使用类型转换函数显式转换类型。
Hive Set操作符
Hadoop Hive支持以下集合操作符。
UNION [DISTINCT]
UNION ALL
Hive 1.2.0之前的版本只支持UNION ALL (bag UNION),在这种情况下重复的行不会被消除。从1.2.0版本开始,Hive包含可选的ALL关键字。
select Statement
{ UNION [DISTINCT] | UNION [ ALL ] }
select Statement;
现在,让我们简要检查一下Hive UNION和UNION。
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)
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]
内容来源于网络,如有侵权,请联系作者删除!