首页 > 其他 > 详细

hive中Sort By,Order By,Cluster By,Distribute By,Group By的区别

时间:2019-07-02 17:39:11      阅读:112      评论:0      收藏:0      [点我收藏+]

order by:

   hive中的order by 和传统sql中的order by 一样,对数据做全局排序,加上排序,会新启动一个job进行排序,会把所有数据放到同一个reduce中进行处理,不管数据多少,不管文件多少,都启用一个reduce进行处理。如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。

sort by:

  sort  by 是局部排序,会在每个reduce端做排序,每个reduce端是排序的,也就是每个reduce出来的数据是有序的,但是全部不一定有序,除非一个reduce,一般情况下可以先进行局部排序完成后,再进行全局排序,会提高不少效率。

distribute by:

  distribute by 是控制map端在reduce上是如何区分的,distribute by  会把指定的值发到同一个reduce中,比如 用上面数据distribute by id 它就会把id相同的值放到一个reduce中执行,不是一个值一个reduce,而是相同的值进入到一个reduce,例如用上面数据可以进入到2个reduce,一般情况下可以sort by 结合使用,先进行分组reduce,再进行排序(相当于mapreduce中的分区函数)。

cluster by:

  这个其实就是distribute by 和sort by 结合使用的结果。
  例如:select id,money,name from t cluster by id;

  等价于:select id,money,name from t distribute by id sort by id

 

distribute by和group by的区别:

  都是按key值划分数据 都使用reduce操作 **唯一不同的是,distribute by只是单纯的分散数据,distribute by col – 按照col列把数据分散到不同的reduce。而group by把相同key的数据聚集到一起,后续必须是聚合操作。

order by和sort by的区别:

  order by是全局排序 sort by只是确保每个reduce上面输出的数据有序。如果只有一个reduce时,和order by作用一样。

 

hive中Sort By,Order By,Cluster By,Distribute By,Group By的区别

原文:https://www.cnblogs.com/hdc520/p/11121786.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!