-- ###################排序操作###########################
-- 1、order by(重点,remember)
-- 用于对最终的结果进行全局排序,要求只能有一个Reduce
select *
from student;
select *
from score;
select *
from student stu
left join score sc on stu.sid = sc.sid
order by sc.sscore desc;
-- 如果order by后边跟多个字段,则最前边的字段是排序的主要条件,如果主要条件相同,则按照次要条件排序
-- order by后边的排序字段不能随便调换位置
select sid, avg(sscore)
from score
group by sid
-- 主要条件降序,如果主要条件相同,则按次要条件降序排序(排序方式可自行指定)
order by sid desc, avg(sscore) desc;
-- 2、sort by
-- 将每一个Reduce的输出结果进行排序,sort by通常和distribute by结合使用
--1)设置reduce个数
set mapreduce.job.reduces=3;
--2)查看设置reduce个数
set mapreduce.job.reduces;
--3)查询成绩按照成绩降序排列
-- sort by会自动的将每一个Reduce输出的内容进行排序
select *
from score sort by sscore desc;
--4)将查询结果导入到文件中(按照成绩降序排列 )
insert overwrite local directory '/export/data/sort'
select *
from score sort by sscore desc;
-- 3. distribute by + sort by分区排序(重点,remember)
-- 1)设置reduce的个数,将我们对应的sid划分到对应的reduce当中去
set mapreduce.job.reduces=7;
-- 2)通过distribute by进行数据的分区
-- 使用distribute来设置MR的K2,然后使用K2的hash值对reduce个数取模进行分区
-- sort by会对每一个分区后的数据再进行排序
explain
select *
from score distribute by sid sort by sscore;
insert overwrite local directory '/export/data/distribute'
select *
from score distribute by sid sort by sscore desc;
-- 4、cluster by
-- distribute by sid sort by sid 等价于---->cluster by sid
---》100个不同sid ---》 reduce格式 设置为3个
-- 当distribute by 和 sort by的字段相同时,则可以使用过cluster by简化书写
-- cluster by默认只能是升序排序,不能指定其他排序方式
set mapreduce.job.reduces=2;
insert overwrite local directory '/export/data/cluster'
select * from score cluster by sid ;
网友评论