Hive的union操作

union和union all(或称为联合)的作用是将多个结果合并在一起显示出来.  
如果需要将多个select语句的结果作为一个整体显示出来,就需要用到union或者union all关键字.

union

union会对多个结果集进行并集操作,不包括重复行,同时进行默认规则的排序.  
Union在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果.
实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表Union. 
-- 一定要设置别名,否则会导致结果不准确.
select a.id aid,a.name aname,b.id bid,b.name bname from test_a a left join test_b b on a.id=b.id
union
select a.id aid,a.name aname,b.id bid,b.name bname from test_a a right join test_b b on a.id=b.id;

union all

union all会对多个结果集进行并集操作,包括重复行,不进行排序.
如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了.
另外,在生产过程中遇到这样的问题:
对多个表进行select count(*) 操作并对结果进行union all的时候发现显示的结果并不是按照select语句排列的,而是发生了乱序,针对这种情况,可以加一列进行区分。
-- 结果每次都不一样
select count(*) from t1
union all
select count(*) from t2
union all
select count(*) from t3
union all
select count(*) from t4;

-- 改写成下面写法就不怕了
select 't1',count(*) from t1
union all
select 't2',count(*) from t2
union all
select 't3',count(*) from t3
union all
select 't4',count(*) from t4;
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早拾碗吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值