码迷,mamicode.com
首页 > 其他好文 > 详细

hive中order by、distribute by、sort by和cluster by的区别和联系

时间:2019-07-05 20:56:06      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:记录   有序   mod   asc   mysql   字段   apr   spec   排序   

hive中order by、distribute by、sort by和cluster by的区别和联系

 

order by

order by 会对数据进行全局排序,和oracle和mysql等数据库中的order by 效果一样,它只在一个reduce中进行所以数据量特别大的时候效率非常低。

而且当设置 :set hive.mapred.mode=strict的时候不指定limit,执行select会报错,如下:

LIMIT must also be specified。

 

sort by

sort by 是单独在各自的reduce中进行排序,所以并不能保证全局有序,一般和distribute by 一起执行,而且distribute by 要写在sort by前面。

如果mapred.reduce.tasks=1和order by效果一样,如果大于1会分成几个文件输出每个文件会按照指定的字段排序,而不保证全局有序。

sort by 不受 hive.mapred.mode 是否为strict ,nostrict 的影响。

 

distribute by

DISTRIBUTE BY 控制map 中的输出在 reducer 中是如何进行划分的。使用DISTRIBUTE BY 可以保证相同KEY的记录被划分到一个Reduce 中。

 

cluster by

distribute by 和 sort by 合用就相当于cluster by,但是cluster by 不能指定排序为asc或 desc 的规则,只能是升序排列。

hive中order by、distribute by、sort by和cluster by的区别和联系

标签:记录   有序   mod   asc   mysql   字段   apr   spec   排序   

原文地址:https://www.cnblogs.com/yjd_hycf_space/p/11140556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!