Hive中UNION ALL和UNION的区别

avatar
作者
猴君
阅读量:0

1.概述

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

2.语法

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表数据

idusernameds
001zhangsan20240307
002lisi20240307
003wangwu20240307

test2表数据

idusernameds
002lisi20240307
003wangwu20240307
004zhaoliu20240307

3.2 查询结果

UNION的查询结果

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

UNION ALL 的查询结果

idusername
002lisi
003wangwu
001zhangsan
002lisi
004zhaoliu
003wangwu

4.总结

联合查询方式UNIONUNION ALL
对重复结果的处理筛选掉重复的结果不会去除重复记录
对排序的处理将两个结果合并后并返回会按照字段的顺序进行排序
效率
总述不去重不排序去重并排序
  • UNION ALL:不去重不排序直接原表合并。
  • UNION:先表合并、再去重、再排序。<=>作用等价于 先distinct去重、再UNION ALL表合并、再order by排序。
  • 效率方面,UNION是UNION ALL的3倍。数据量大时,不建议直接用UNION,建议先去重再UNION ALL。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!