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

Jamina ·
更新时间:2024-11-10
· 566 次阅读

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
作者:穷目楼



order by cluster BY order hive sort

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章