Hive中UNION ALL和UNION的区别

1.概述

Hive官方提供了一种联合查询的语法,原名为Union Syntax,用于联合两个表的记录进行查询,此处的联合和join是不同的,join是将两个表的字段拼接到一起,而union是将两个表的记录拼接在一起。 换言之, join是用于左右拼接,而union是用于上下拼接。

2.语法

sql 复制代码
select_statement UNION [ALL | DISTINCT] select_statement UNION [ALL | DISTINCT] select_statement ...

UNION是将多个查询结果集合并到一个结果中。UNION与UNION ALL的区别是 union会对两个子查询的结果去重合并,而union all不会对子查询结果去重处理。

注:

  • Hive 1.2.0之前的版本仅支持UNION ALL,其中重复的行不会被删除。
  • Hive 1.2.0和更高版本中, union的默认从结果中删除重复行。使用可选的distinct关键字指定了删除重复行。使用可选的all关键字,不会删除重复行,结果包含select语句中的所有匹配行。
    • 可以在同一查询中混合使用union all和union distinct。
    • 每个select语句返回的列的数量和名称必须相同,否则报错。

3.使用案例

3.1 准备数据

test1表数据

id username ds
001 zhangsan 20240307
002 lisi 20240307
003 wangwu 20240307

test2表数据

id username ds
002 lisi 20240307
003 wangwu 20240307
004 zhaoliu 20240307

3.2 查询结果

UNION的查询结果

sql 复制代码
SELECT  id
       ,username
FROM    test1
WHERE   ds = '${bizdate}'
UNION 
SELECT  id
       ,username
FROM   test2
WHERE   ds = '${bizdate}';
id username
001 zhangsan
002 lisi
003 wangwu
004 zhaoliu

UNION ALL 的查询结果

id username
002 lisi
003 wangwu
001 zhangsan
002 lisi
004 zhaoliu
003 wangwu

4.总结

联合查询方式 UNION UNION ALL
对重复结果的处理 筛选掉重复的结果 不会去除重复记录
对排序的处理 将两个结果合并后并返回 会按照字段的顺序进行排序
效率
总述 不去重不排序 去重并排序
  • UNION ALL:不去重不排序直接原表合并。
  • UNION:先表合并、再去重、再排序。<=>作用等价于 先distinct去重、再UNION ALL表合并、再order by排序。
  • 效率方面,UNION是UNION ALL的3倍。数据量大时,不建议直接用UNION,建议先去重再UNION ALL。
相关推荐
juniperhan2 天前
Flink 系列第4篇:Flink 时间系统与 Timer 定时器实战精讲
java·大数据·数据仓库·flink
juniperhan2 天前
link 系列第7篇:Flink 状态管理全解析(原理+类型+存储+实操)
大数据·数据仓库·flink
juniperhan2 天前
Flink 系列第6篇:Watermark 水印全解析(原理+实操+避坑)
大数据·数据仓库·flink
武子康2 天前
大数据-264 实时数仓-MySQL Binlog配置详解:从原理到实践|数据恢复与主从复制实战
大数据·hadoop·后端
武子康2 天前
大数据-265 实时数仓-Canal MySQL Binlog配置详解:从原理到实践|数据恢复与主从复制实战
大数据·hadoop·后端
晓纪同学2 天前
WPF-03 第一个WPF程序
大数据·hadoop·wpf
2501_933329553 天前
技术深度剖析:Infoseek 字节探索舆情处置系统的全链路架构与核心实现
大数据·数据仓库·人工智能·自然语言处理·架构
xiaoyaohou113 天前
024、大数据技术栈概览:Hadoop、Spark与Flink
大数据·hadoop·spark
虚幻如影3 天前
Hive 中“STRING类型无需显式指定长度
数据仓库·hive·hadoop
荒川之神3 天前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle