order by,sort by,distribute by,cluster by的区别是什么?
前言
本文隶属于专栏《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 子句排序
- asc (ascend)—— 升序 (默认)
- 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的区别是什么?相关推荐
- 4种排序方式比较:order by, sort by, distribute by, cluster by
文章记录了4种排序方式:order by, sort by, distribute by, cluster by 总结: order by 全局排序,只有一个 Reducer,通过order对字段进行 ...
- Hive中的四种排序方式(order by,sort by,distribute by,cluster by)使用与区别详解
在平时的Hive数仓开发工作中经常会用到排序,而Hive中支持的排序方式有四种,这里结合具体的案例详细介绍一下他们的使用与区别: order by sort by distribute by clus ...
- hive中order by,sort by, distribute by, cluster by作用以及用法
1. order by Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的数据都会 ...
- Hive中的order by ,sort by ,distribute by , cluster by 区别
#Hive的本质就是MapReduce #设置reduce个数 set mapreduce.job.reduces=num //设置num数量的reduce #查看设置reduce个数 set ma ...
- hive四种排序Order By , Sort By ,Distribute By ,Cluster By
前文 Hive的本质是MapReduce,MapReduce中如何排序的?? MapReduce分为几种: 1.全排序order By: 结果只有一个(也就是只有一个分区),所有的数据整体有序. 2. ...
- hive 中排序order by,sort by,distribute by使用
前提:hive 中使用的排序有oder by, sort by,distribute By,cluster By 具体使用如下 测试数据: 0: jdbc:hive2://hadoop-03:1000 ...
- hive笔记(五):查询、排序-join语句/连接/分区/sort by/distribute by/cluster by
目录 查询 Join语句 等值Join 表的别名 内连接 左外连接 右外连接 满外连接 多表连接 笛卡尔集 排序 全局排序 按照别名排序 多个列排序 reduce内部排序(sort by) 分区(di ...
- hive 的分隔符、orderby sort by distribute by的优化
一.Hive 分号字符 分号是SQL语句结束标记,在HiveQL中也是,可是在HiveQL中,对分号的识别没有那么智慧,比如: select concat(cookie_id,concat(';',' ...
- 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 ...
最新文章
- 好记性不如烂笔头:会议纪要本
- 李宏毅线性代数笔记13:SVD分解
- 【新年礼物】pmcaff会员大放送!
- cad细等线体不显示_CAD打印文字不显示?很多人不知道这个知识点!
- Hystrix之外健壮微服务的新选择:Sentinel 发布首个生产版本 1
- linux 手动睡眠
- Android 尺寸 神图
- 【牛客 - 157C】PH试纸(前缀和,或权值线段树,主席树)
- 一些OEM的厂商的漏洞分析
- Bailian4123 马走日【DFS】
- html获取qq高清头像
- mysql数据库算法_MySql联接算法
- 在无聊的时候玩小游戏
- upsert----非标准DML语句
- Android MMKV
- 最新酷睿计算机配置,笔记本电脑什么配置好?来看最新Intel11代酷睿cpu
- 盘点8款流行的网红纱帘,以及它们的特点 - 江南爱窗帘十大品牌
- Kafka 生产者压缩算法是什么?何时压缩和解压?什么压缩性能好?
- 手机主板ESD设计注意事项
- abb机器人离线编程软件解密_一文看懂最新机器人离线编程软件【详细】
热门文章
- 想要做好网赚那么需要具备这些能力!
- 做网赚选择和坚持很重要!
- 如何把excel导入python_如何将Excel导入Python之中呢?
- css元素特殊性及元素分类,详细解释。
- 记录几个可用RTMP测试地址(2021/04/09)
- MapReduce分布式计算(一)
- 生成对抗网络(Generative Adversial Network,GAN)原理简介
- uni.app小程序登录页持久化存储和退出后清除本地缓存
- java字符串长度_Java中String字符串的最大长度?
- python cdr_Python 常用模块简析