Hive 排序

Felicite ·
更新时间:2024-09-21
· 640 次阅读

order by

Order By:对查询结果集执行一个全局排序,一个Reducer。ORDER BY 子句在SELECT语句的结尾。对于大数据集,order by过程会消耗很大的时间。

示例1:
在这里插入图片描述
在这里插入图片描述 示例2:
在这里插入图片描述
结果:
在这里插入图片描述 sort by

sort by:在每个reduce中对数据进行排序,也就是执行一个局部排序过程。这可以保证每个reduce输出的数据都是有序的(但并非全局有效)。这样就可以提高后面进行的全局排序的效率了。
Sort By:每个Reducer内部进行排序,对全局结果集来说不排序。

示例1:
在这里插入图片描述
在这里插入图片描述 示例2:设置mapreduce.job.reduces=1,结果和使用order by 一样
在这里插入图片描述
在这里插入图片描述 示例:设置mapreduce.job.reduces=2
在这里插入图片描述
在这里插入图片描述 distribute by

distribute by:控制 map的输出在reducer中是如何划分的。

mapreduce job 中传输的所有数据都是按照键-值对的方式进行组织的,因此hive在将用户的查询语句转换成mapreduce job时,其必须在内部使用这个功能。默认情况下,MapReduce计算框架会依据map输入的键计算相应的哈希值,然后按照得到的哈希值将键-值对均匀分发到多个reducer中去。不过不幸的是,这也是意味着当我们使用sort by 时,不同reducer的输出内容会有明显的重叠,即使每个reducer输出的数据都有序的。

Distribute By:进行分区,类似MapReduce中partition,结合sort by使用(DISTRIBUTE BY语句要写在SORT BY语句之前)。

示例1:将三个部门的数据,写到三个不同的文件中。第一个文件中按照sal进行排序。
对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

示例2:按照deptno分区,在每个区中按deptno降序排序
在这里插入图片描述
在这里插入图片描述

cluster by

如果distribute by 语句和sort by语句涉及到列的完全相同,而且采用的是升序的方式,那么就可以用到cluster by 。

当distribute by和sort by字段相同时,可以使用cluster by方式。
即按单词分区,又按单词排序。
cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序,不能指定排序规则。

示例1:按deptno分区,也按deptno排序
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

示例2:
在这里插入图片描述
在这里插入图片描述


作者:梁云亮



hive 排序

需要 登录 后方可回复, 如果你还没有账号请 注册新账号