您当前的位置: 首页 >  hive

梁云亮

暂无认证

  • 2浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Hive 排序

梁云亮 发布时间:2020-02-20 16:21:20 ,浏览量:2

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: 在这里插入图片描述 在这里插入图片描述

关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0434s