Hive拉拉扯扯的order by,sort by,distribute by, cluster by

Hive支持两个层面的排序:

  • 全局排序
  • 部分排序

全局排序用

order by col [ASC | DESC]

实现,效果和传统的RDMS一样,保证最后的数据全局有序。

部分排序用

sort by col [ASC | DESC]

实现,保证同一个reducer处理的数据有序,对于结果数据则表现为局部有序。

Hive对用户提供的同样是SQL,但底层实现却和传统数据库有天壤区别,底层实现默默情况下是利用了Hadoop的计算框架MapReduce,当然也支持使用Spark, Tez。鉴于此,Hive有一些自己特定,比如order by的实现需要把所有数据汇集到一个reducer中处理,如果数据量巨大,这个一步将会成为整个任务的潜在问题点,所以Hive在严格模式下(hive.mapred.mode=strict)时,使用order by必须搭配使用limit

同时是由于Hive底层的实现机制的原因,Hive有两个相关的字句distribute bycluster by

distribute by 

确保具有相同分区键的数据全部被分配到同一个reducer处理。

cluster by

确保具有相同分区键的数据全部被分配到同一个reducer处理,同时确保同一个reducer中的数据顺序。相当于:

disribute by col sort by col

不过分开或组合使用disribute by显得更加灵活:

  • sort by只负责排序,数据的划分则是随机划分到reducer
  • distribute bysort by可以作用于不同的列上,一个常用的情景是
disribute by col_A sort by col_A,col_B
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值