hive的全局排序分区排序局部排序

  • Post author:
  • Post category:其他


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;

在这里插入图片描述



版权声明:本文为qq_45450889原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。