HIVE排序

1.官方文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy

启动时的一些提示信息

In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>

为了限制reducers的最大值:set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>

设置MapReduce的job任务的reducer数目

2.order by

对全局数据的一个排序,仅仅只有一个reduce,使用的时候要注意一下

desc表示降序 默认是asc升序的。

select * from emp order by empno desc ;

3.sort by

对每一个reduce内部数据进行排序,没有排序全局结果集。

首先设置3个reducer

set mapreduce.job.reduces=3;

shell中查询

select * from emp sort by empno ;

然后呢,你会发现这个查询结果和order by差不多,嗯,这个时候我们把他保存到本地文件中再查看一下啦

insert overwrite local directory  '/opt/datas/sort-result' 
select * from  emp  sort by empno asc ;

会发现对应路径下生成了三个文件 ,而且文件里面的数据都排好序。

4.distribute by

类似于MapReduce中的partition,对数据进行分区,结合sort by进行使用

insert overwrite local directory  '/opt/datas/distribute-result' 
select * from  emp  
distribute by  deptno
sort by empno asc ;

注意distribute by一定要在sort by前面

不使用distribute by之前,只使用sort by 查询结果

加上distribute by deptno之后(最后一个字段是deptno,然后刚刚好是3个值)

sort by设置了3个reducer对应了三个文件,然后distribute by对应的是三个分区 3个值 一个值一个分区一个文件

可以发现 加上distribute by之后,这里的deptno只有一个值啦

5.cluster by

当distribute by和sort by字段相同时,就可以使用cluster by代替

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值