分享

hive中四种排序作用总结

langke93 2016-8-27 15:55:33 发表于 总结型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 22559
本帖最后由 langke93 于 2016-8-27 15:58 编辑

问题导读

1.order by是全局排序还是局部排序?
2.sort by与order by有什么不同?
3.distribute by和sort by如何一起使用?




1. order by   
Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的数据都会到同一个reducer进行处理(不管有多少map,也不管文件有多少的block只会启动一个reducer)。但是对于大量数据这将会消耗很长的时间去执行。
    这里跟传统的sql还有一点区别:如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。

2. sort by   
Hive中指定了sort by,那么在每个reducer端都会做排序,也就是说保证了局部有序(每个reducer出来的数据是有序的,但是不能保证所有的数据是有序的,除非只有一个reducer),好处是:执行了局部排序之后可以为接下去的全局排序提高不少的效率(其实就是做一次归并排序就可以做到全局排序了)。

3. distribute by和sort by一起使用   
ditribute by是控制map的输出在reducer是如何划分的,举个例子,我们有一张表,mid是指这个store所属的商户,money是这个商户的盈利,name是这个store的名字
store:

midmoneyname
AA15.0商店1
AA20.0商店2
BB22.0商店3
CC44.0商店4

    执行hive语句:
[mw_shl_code=bash,true]select mid, money, name from store distribute by mid sort by mid asc, money asc  
[/mw_shl_code]


我们所有的mid相同的数据会被送到同一个reducer去处理,这就是因为指定了distribute by mid,这样的话就可以统计出每个商户中各个商店盈利的排序了(这个肯定是全局有序的,因为相同的商户会放到同一个reducer去处理)。这里需要注意的是distribute by必须要写在sort by之前。

4. cluster by   
cluster by的功能就是distribute by和sort by相结合,如下2个语句是等价的:
[mw_shl_code=bash,true]select mid, money, name from store cluster by mid  
[/mw_shl_code]

[mw_shl_code=bash,true]select mid, money, name from store distribute by mid sort by mid  
[/mw_shl_code]

    如果需要获得与3中语句一样的效果:

[mw_shl_code=bash,true]select mid, money, name from store cluster by mid sort by money  
[/mw_shl_code]
    注意被cluster by指定的列只能是降序,不能指定asc和desc。



作者:metooxi
来源:iteye



欢迎加入about云群425860289432264021 ,云计算爱好者群,关注about云腾讯认证空间

已有(3)人评论

跳转到指定楼层
xingoo 发表于 2016-8-29 21:55:22
简单易懂!不错不错...不过distribute by 得有点Mapreduce基础才能理解。
回复

使用道具 举报

llp 发表于 2017-9-24 10:39:39
请问:cluster by默认是降序desc,3中语句是asc升序,那么 select mid,monet,name from store cluster by mid sort by money;怎么会和3中语句实现一样的效果呢??求教
回复

使用道具 举报

若无梦何远方 发表于 2019-8-18 15:42:26
cluster by 讲的不够清除,不是很好理解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条