Apache Hive 查询中 UNION
关键字用来将两个或多个表合并后进行查询,需要保证 SELECT
中字段须一致,每个 SELECT
语句返回的列的数量和名字必须一样,否则,会抛出语法错误。具体它有两种用法,一个是后接 DISTINCT
,也可以不写,另一个是后跟 ALL
关键字。
UNION 和 UNION ALL
语法:
select_statement UNION [ALL | DISTINCT] select_statement UNION [ALL | DISTINCT] select_statement …
从语法中可以看出 UNION
有两个可选的关键字:
- 使用
ALL
关键字,不会删除重复行,也就是保留所有结果集,同时也没任何排序,由于只是简单地将两个列相同的表合并,所以效率比较快。 - 使用
DISTINCT
关键字与使用UNION
默认值效果一样,都会删除重复行,同时进行默认规则的排序,作用等价于先DISTINCT
去重、再UNION ALL
表合并、再ORDER BY
排序,效率方面它是UNION ALL
的3倍,所以,数据量大时,不建议直接用UNION
。
Hive 1.2.0 之前的版本仅支持
UNION ALL
,其中重复的行不会被删除。Hive 1.2.0 和更高版本中,
UNION
的默认行为是从结果中删除重复的行。
UNION 在 FROM 子查询中
在 Hive 0.12.0 和更低版本中,UNION
只能在子查询中使用,如下示例:
SELECT *
FROM (
select_statement
UNION ALL
select_statement
) unionResultAlias
UNION 支持在顶级查询中
从 Hive 0.13.0 开始,UNION
也可以在顶级查询中使用,如下示例:
select_statement
UNION ALL
select_statement
UNION ALL …