前言

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系

正文

1. order by 会对所给的全部数据进行全局排序,不管来多少数据,都只启动一个reducer来处理 。
2. sort by是 局部排序,sort by会根据数据量的大小启动一到多个 reducer 来干活,并且,它会在进入 reduce 之前为每个 reducer 都产生一个排序文件 。
3. distribute by 控制 map 结果的分发,它会将具有相同字段的 map 输出分发到一个 reduce 节点上做处理 。
4. cluster by 可以理解为一个特殊的 distribute by 和 sort by 的结合,当 distribute by 和 sort by 后面所跟的列名相同时,就等同于直接使用 cluster by 跟上该列名。
但是被cluster by指定的列最终的排序结果只能是降序,而且无法指定 asc 和 desc。

补充

1. order by 全局排序

全局排序,只有一个reduce

使用 order by 子句排序

  1. asc (ascend)—— 升序 (默认)
  2. desc (descend)—— 降序

order by 子句在 select 语句的结尾

2. distribute by 分区排序

distribute by 类似 MapReduce 中 partition,采集 hash 算法,在 map 端将查询的结果中 hash 值相同的结果分发到对应的 reduce 文件中。需要结合sort by使用。

注意: Hive要求 distribute by 语句要写在 sort by 语句之前。

3. cluster by

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

  • 除了 distribute by 的功能外,还会对该字段进行排序,所以 cluster by = distribute by + sort by

--以下两种写法等价insert overwrite local directory '/home/hadoop/hivedata/distribute_sort'
select * from student distribute  by score sort  by score;insert overwrite local directory '/home/hadoop/hivedata/cluster'
select * from student cluster by score;

实践

1. 查询学生的成绩,并按照分数降序排列

select * from student s order by score desc;

2. 按照别名排序

  • 按照学生分数的平均值排序
select s.sid,s.tname, avg(score)  as score_avg  from student s  group by  s.sid,s.tname order by score_avg  desc;

3. 多列排序

  • 按照学生分数和年龄升序排序
select *  from student s order by score,age;

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

sort by:每个reducer内部进行排序,对全局结果集来说不是排序。

1、设置reduce个数

set mapreduce.job.reduces=3;

2、查看设置reduce个数

set mapreduce.job.reduces;

3、查询成绩按照成绩降序排列

select * from student s sort by s.score;

4、将查询结果导入到文件中(按照成绩降序排列)

insert overwrite local directory '/home/hadoop/hivedata/sort' select * from student s sort by s.score;

5. 先按照学生 sid 进行分区,再按照学生成绩进行排序

1、设置reduce的个数

set mapreduce.job.reduces=3;

2、通过 distribute by 进行数据的分区,将不同的 sid 划分到对应的 reduce 当中去

insert overwrite local directory '/home/hadoop/hivedata/distribute' select * from student distribute by sid sort by score;

order by,sort by,distribute by,cluster by的区别是什么?相关推荐

  1. 4种排序方式比较:order by, sort by, distribute by, cluster by

    文章记录了4种排序方式:order by, sort by, distribute by, cluster by 总结: order by 全局排序,只有一个 Reducer,通过order对字段进行 ...

  2. Hive中的四种排序方式(order by,sort by,distribute by,cluster by)使用与区别详解

    在平时的Hive数仓开发工作中经常会用到排序,而Hive中支持的排序方式有四种,这里结合具体的案例详细介绍一下他们的使用与区别: order by sort by distribute by clus ...

  3. hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的数据都会 ...

  4. Hive中的order by ,sort by ,distribute by , cluster by 区别

    #Hive的本质就是MapReduce #设置reduce个数 set mapreduce.job.reduces=num  //设置num数量的reduce #查看设置reduce个数 set ma ...

  5. hive四种排序Order By , Sort By ,Distribute By ,Cluster By

    前文 Hive的本质是MapReduce,MapReduce中如何排序的?? MapReduce分为几种: 1.全排序order By: 结果只有一个(也就是只有一个分区),所有的数据整体有序. 2. ...

  6. hive 中排序order by,sort by,distribute by使用

    前提:hive 中使用的排序有oder by, sort by,distribute By,cluster By 具体使用如下 测试数据: 0: jdbc:hive2://hadoop-03:1000 ...

  7. hive笔记(五):查询、排序-join语句/连接/分区/sort by/distribute by/cluster by

    目录 查询 Join语句 等值Join 表的别名 内连接 左外连接 右外连接 满外连接 多表连接 笛卡尔集 排序 全局排序 按照别名排序 多个列排序 reduce内部排序(sort by) 分区(di ...

  8. hive 的分隔符、orderby sort by distribute by的优化

    一.Hive 分号字符 分号是SQL语句结束标记,在HiveQL中也是,可是在HiveQL中,对分号的识别没有那么智慧,比如: select concat(cookie_id,concat(';',' ...

  9. Hive中4个By Sort By 、Order By、Distrbute By、 Cluster By区别

    1)Sort By:分区内有序: 2)Order By:全局排序,只有一个Reducer: 3)Distrbute By:类似MR中Partition,进行分区,结合sort by使用. 4) Clu ...

最新文章

  1. 好记性不如烂笔头:会议纪要本
  2. 李宏毅线性代数笔记13:SVD分解
  3. 【新年礼物】pmcaff会员大放送!
  4. cad细等线体不显示_CAD打印文字不显示?很多人不知道这个知识点!
  5. Hystrix之外健壮微服务的新选择:Sentinel 发布首个生产版本 1
  6. linux 手动睡眠
  7. Android 尺寸 神图
  8. 【牛客 - 157C】PH试纸(前缀和,或权值线段树,主席树)
  9. 一些OEM的厂商的漏洞分析
  10. Bailian4123 马走日【DFS】
  11. html获取qq高清头像
  12. mysql数据库算法_MySql联接算法
  13. 在无聊的时候玩小游戏
  14. upsert----非标准DML语句
  15. Android MMKV
  16. 最新酷睿计算机配置,笔记本电脑什么配置好?来看最新Intel11代酷睿cpu
  17. 盘点8款流行的网红纱帘,以及它们的特点 - 江南爱窗帘十大品牌
  18. Kafka 生产者压缩算法是什么?何时压缩和解压?什么压缩性能好?
  19. 手机主板ESD设计注意事项
  20. abb机器人离线编程软件解密_一文看懂最新机器人离线编程软件【详细】

热门文章

  1. 想要做好网赚那么需要具备这些能力!
  2. 做网赚选择和坚持很重要!
  3. 如何把excel导入python_如何将Excel导入Python之中呢?
  4. css元素特殊性及元素分类,详细解释。
  5. 记录几个可用RTMP测试地址(2021/04/09)
  6. MapReduce分布式计算(一)
  7. 生成对抗网络(Generative Adversial Network,GAN)原理简介
  8. uni.app小程序登录页持久化存储和退出后清除本地缓存
  9. java字符串长度_Java中String字符串的最大长度?
  10. python cdr_Python 常用模块简析