1. 全局排序 order by
a. 执行的时候只有一个reduce
b. 默认是asc升序
c. desc查询结果倒序
d. 在select语句的结尾
e. 案例实操:
i. 查询员工信息按工资升序排列 :select * from emp order by salary; 或者 select * from emp order by salary asc;
ii. 查询员工信息按工资降序排列 : select * from emp order by salary desc;
f. 多个列排序 :相当于mapreduce中的二次排序
i. 案例实操:
按照部门和工资升序排序 : select * from emp order by emp_id,salary;
g. 按照别名排序:
i. 案例实操:
按照员工薪水的 2 倍排序 :select ename, sal*2 twosal from emp order by twosal;
2. 局部排序 sort by
a. 每个reduce中处理那些数据,控制不了,随机,均匀分布
b. 保证灭个reduce Task有序
c. 先设置job的数量 : set mapreduce.job.reduces; 默认是-1,表示自己判断几个mapreduce
d. 将查询的字段存到文件中:insert overwrite local directory ‘本地路径’ select * from xxx sort by xxx.id;
e. 是怎么进行分区的:通过key hashcode % 3
f. 案例实操:
i. 根据部门编号降序查看员工信息 :select * from emp sort by emp_id desc;
ii. 将查询结果导入到文件中(按照部门编号降序排序) :insert overwrite local directory ‘/home/hduser/software/hive_1.2.1/export_data’ select * from emp sort by emp_id;
3. 分区排序 distribute by
a. 只是分区,规定什么样的数据能够使用一个reduce进行处理
b. 默认情况下不会排序,如果想要排序需要和sort by一起使用,并且要写在sort by之前
c. 案例实操:
i. 先按照部门编号分区,再按照员工编号降序排序:insert overwrite local directory '/home/hduser/software/hive_1.2.1/export_data' select * from emp distribute by dept_id sort by emp_id;
4. Cluster by : 相当于对相同字段进行分区和排序
a. insert overwrite local directory ‘/home/hduser/software/hive_1.2.1/export_data’ select * from emp distribute by dept_id sort by dept_id;
相当于select * from emp cluster by dept_id;