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 分区排序- 类似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;