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。
相关推荐
yumgpkpm37 分钟前
AI算力纳管工具GPUStack Server+华为鲲鹏+麒麟操作系统 保姆级安装过程
人工智能·hadoop·华为
`林中水滴`1 小时前
【数据仓库】Iceberg、Hudi、Delta Lake、Paimon:四大开源湖表格式怎么选?
数据仓库
黄昏回响1 小时前
计算机系统基础知识(补充篇):数据库——数据仓库、数据中台与大数据技术详解
大数据·数据库·数据仓库
hellolianhua1 小时前
测试集群hdfs和mapreduce
大数据·hadoop·hdfs
淡定一生233316 小时前
数据仓库中的退化维度
数据仓库
smchaopiao1 天前
Hive中的排序与分桶技术详解
数据仓库·hive·hadoop
tsyjjOvO4 天前
SpringMVC 从入门到精通
数据仓库·hive·hadoop
Francek Chen4 天前
【大数据存储与管理】分布式数据库HBase:05 HBase运行机制
大数据·数据库·hadoop·分布式·hdfs·hbase
zzzzzwbetter4 天前
Hadoop完全分布式部署-Master的NameNode以及Slaver2的DataNode未启动
大数据·hadoop·分布式
weixin_449310844 天前
ETL转换和数据写入小满OKKICRM的技术细节
数据仓库·php·etl