专栏首页cwl_Java大数据-Hive排序

大数据-Hive排序

2.9. 排序

2.9.1. 全局排序

Order By:全局排序,一个reduce

  1. 使用 ORDER BY 子句排序 ASC(ascend): 升序(默认) DESC(descend): 降序
  2. ORDER BY 子句在SELECT语句的结尾。
案例实操
  1. 查询学生的成绩,并按照分数降序排列
SELECT * FROM student s LEFT JOIN score sco ON s.s_id = sco.s_id ORDER BY sco.s_score DESC; 
  1. 查询学生的成绩,并按照分数升序排列
SELECT * FROM student s LEFT JOIN score sco ON s.s_id = sco.s_id ORDER BY sco.s_score asc;

2.9.2. 按照别名排序

按照分数的平均值排序

select s_id ,avg(s_score) avg from score group by s_id order by avg;

2.9.3. 多个列排序

按照学生id和平均成绩进行排序

select s_id ,avg(s_score) avg from score group by s_id order by s_id,avg;

2.9.4. 每个MapReduce内部排序(Sort By)局部排序

Sort By:每个MapReduce内部进行排序,对全局结果集来说不是排序。

  1. 设置reduce个数
set mapreduce.job.reduces=3; 
  1. 查看设置reduce个数
set mapreduce.job.reduces; 
  1. 查询成绩按照成绩降序排列
select * from score sort by s_score; 
  1. 将查询结果导入到文件中(按照成绩降序排列)
insert overwrite local directory '/export/servers/hivedatas/sort' select * from score sort by s_score

2.9.5. 分区排序(DISTRIBUTE BY)

Distribute By:类似MR中partition,进行分区,结合sort by使用。

注意,Hive要求DISTRIBUTE BY语句要写在SORT BY语句之前。

对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。

案例实操:先按照学生id进行分区,再按照学生成绩进行排序。

  1. 设置reduce的个数,将我们对应的s_id划分到对应的reduce当中去
set mapreduce.job.reduces=7; 
  1. 通过distribute by 进行数据的分区
insert overwrite local directory '/export/servers/hivedatas/sort' select * from score distribute by s

2.9.6. CLUSTER BY

当distribute by和sort by字段相同时,可以使用cluster by方式。

cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是倒序排序,不能指定排序规则为ASC 或者DESC。 以下两种写法等价

select * from score cluster by s_id; 
select * from score distribute by s_id sort by s_id;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 经典笔试题-数据结构、算法及计算机基础篇

    181、常用UNIX 命令(Linux 的常用命令)(至少10 个)【基础】 答:ls pwd mkdir rm cp mv cd ps ftp telnet...

    cwl_java
  • 大数据-Hive查询语法

    因此,如果分桶和sort字段是同一个时,此时, cluster by = distribute by + sort by 分桶表的作用:最大的作用是用来提高j...

    cwl_java
  • 数据库MySQL-数据库表的水平拆分

    表的水平拆分是为了解决单表数据量过大的问题,水平拆分的表每一个表的结构都是完全一致的,以下面的peyment表为例来说明

    cwl_java
  • 什么是SQL注入?如何预防?

    本次演示使用的是目前最热门的Java快速开发架构:SpringBoot2.3.4 + Mybatis + Mysql8

    甲蛙全栈
  • Mybatis的增删改查

    爱撒谎的男孩
  • 面试常用排序算法总结

    其他的排序算法也经常会问到,虽然在工作中,我们很少有需要自己手写排序算法的机会,但是这种入门级的算法却是证明我们能力的一种简单方法.因此要熟悉掌握.

    呼延十
  • LL(1)文法--递归下降程序

    递归下降程序一般是针对某一个文法的。而递归下降的预测分析是为每一个非终结符号写一个分析过程,由于文法本身是递归的,所以这些过程也是递归的。 以上是前提。

    Enterprise_
  • 获取数据字典

     表结构信息查询 SELECT      TableName=CASE WHEN C.column_id= THEN O.name ELSE N'' END,...

    阿新
  • Objective-C关于id引发的一些思考 原

        Objective-C是面向对象语言,但其中又并非全部是对象。在初学这门语言时,我常常从意识上将NS开头的类型与C语言原本的那些类型分割开来,假装他们之...

    珲少
  • 房上的猫:数组插入算法等难点专开

    一:查找算法 public class Aini { public static void main(String[] args) { ...

    房上的猫

扫码关注云+社区

领取腾讯云代金券