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
发布了106 篇原创文章 · 获赞 15 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/skyupward/article/details/104381615
今日推荐