![d130b49045559f7d76b64e7be93c0392.png](https://i-blog.csdnimg.cn/blog_migrate/25a3febda71aaea8d0179926e5852832.jpeg)
order by 全局排序
- 全局排序,只有一个reduce
- 使用 ORDER BY 子句排序
-
- asc ( ascend) 升序 (默认)
- desc (descend) 降序
-
- order by 子句在select语句的结尾
- 案例实操
- 查询学生的成绩,并按照分数降序排列
- select * from score s order by s_score desc ;
- 查询学生的成绩,并按照分数降序排列
每个MapReduce内部排序(Sort By)局部排序
- sort by:每个reducer内部有序排序(局部有序),对全局结果集来说并非全局有序。
- 设置reduce个数
- set mapreduce.job.reduces=3;
- 查看reduce的个数
- set mapreduce.job.reduces;
- 查询成绩按照成绩降序排列
- select * from score s sort by s.s_score;
distribute by 分区排序
- distribute by:
-
- 类似MR中partition,采集hash算法,在map端将查询的结果中hash值相同的结果分发到对应的reduce文件中。
- 结合sort by使用。
- 注意
- Hive要求 distribute by 语句要写在 sort by 语句之前
- 案例实操
- 先按照学生 sid 进行分区,再按照学生成绩进行排序
- 设置reduce的个数
- set mapreduce.job.reduces=3;
- 通过distribute by 进行数据的分区,,将不同的sid 划分到对应的reduce当中去
insert overwrite local directory '/kkb/install/hivedatas/distribute' select * from score distribute by s_id sort by s_score;
cluster by
- 当distribute by和sort by字段相同时,可以使用cluster by方式代替
- 除了distribute by 的功能外,还会对该字段进行排序,所以cluster by = distribute by + sort by
--以下两种写法等价insert overwrite local directory '/install/hivedatas/distribute_sort' select * from score distribute by s_score sort by s_score;insert overwrite local directory /install/hivedatas/cluster' select * from score cluster by s_score;