【hive】 union 与 union all使用注意事项

union all 
union 

相同点:   相当于上下拼接 ;联合多个select语句的结果集合并为一个单独的结果集
不同点:   union有去重效果,速度会更慢;
 

union all 使用注意事项:

1.需要保证select中字段须一致,每个select语句返回的列的数量和名字必须一样,否则会报错。在1.2.1后的版本中出现一次union all对应列名不一致也不报错;但是多次union all列名必须一致否则会报错;建议直接列名保持一致即可;

例如:

##以上会可能会出现报错;但是使用别名则成功返回结果: 

select age a from student 
union all 
select name a from student

注意:

实际测试发现hive1.2.1之后使用union all时只允许使用一次union all时允许列名不一致;但是有多个union all时必须保持所有的列名一致;否则还是会报错;

##hive1.2.0之后列名不一致报错提示为:

FAILED: SemanticException Line 0:-1 Invalid column reference 'jr_prov1'

##hive1.2.0之后使用多个union all时列名不一致报错提示为:

FAILED: SemanticException 5:24 Schema of both sides of union should match. _u1-subquery2 does not have the field order_id. Error encountered near token 'tabletest'

2.ORDER BY、CLUSTER BY、DISTRIBUTE BY、SORT BY、LIMIT这些语句不能在UNION ALL中单独的查询中使用,前四个排序语句必须括起来使用子查询后使用,LIMIT语句则可以先使用WITH AS语句在各自的查询中查好,最后再UNION ALL。例如下面的写法会报错:

3.union all使用优化

如果使用union all之后进行insert into操作;则最好写成多个insert into语句来执行;实际测试性能可能提高50%以上;

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值