当前位置: 首页 > news >正文

高频面试八股文用法篇(二) hive中几种排序类型区别

目录

排序函数

1、order by  

2、sort by  

3、distribute by

4、cluster by

总结


排序类型

 

 

1、order by  

order by是与关系型数据库的用法是一样的。select * from emp order by empno desc; 

针对全局数据进行排序,所以最终只会有1个reduce,因为一个reduce对应一个输出文件,全局排序的话只能有一个输出文件,这个是不受hive的参数控制的。如果要查询的结果集数据量比较大的话,只有一个reduce运行,那么效率会非常低,所以在实际应用中一定要谨慎使用order by

2、sort by  

对每一个reduce内部进行排序,而对全局结果集来说是没有进行排序的。
1)一般在实际使用中会比较经常使用sort by。

2)需要先设置reduce的数量; 设置执行时reduce的个数: set mapreduce.job.reduces=<number> 查询语句为: select * from emp sort by empno asc;

3)每个输出结果的文件中的数据都是按empno进行排好序的


3、distribute by

 类似于MapReduce中的partition的功能,对数据进行分区排序,一般和sort by结合进行使用。 以员工表为例,按照部门进行排序的查询语句写法如下: insert overwrite local directory '/opt/datas/distby-res' select * from emp distribute by deptno sort by empno asc


注意,distribute by必须要在sort by之前,原因是要先进行分区,然后才能进行排序。

例子: 

第一个文件的部门编号是30,第二个文件的部门编号是10,第三个部门编号是20。然后每个部门的员工数据都是按照员工编号进行升序排列的。

4、cluster by

cluster by是sort by和distribute by的组合,当sort by和distribute by的字段相同的时候,可以使用cluster by替代。

1)参考查询语句如下: insert overwrite local directory '/opt/datas/clustby-res' select * from emp cluster by empno ; 

2)注意,cluster by 后面不能指定desc或者asc,否则会报错。

总结

order by : 全局排序,一个reduce。可能性能会比较差

sort by: 每个reduce内部排序,全局不排序。一般在实际使用中会比较经常使用sort by

distribute by:分区排序,需要结合sort by使用

cluster by: 当sort by和distribute by的字段相同的时候使用。但是cluster by默认是升序,不能指定排序方向;

http://www.lryc.cn/news/91459.html

相关文章:

  • linuxOPS基础_linux umask
  • K8s基础核心
  • Web开发中的图片管理:策略与实践
  • SNK施努卡 - 机器视食品检测 食品中视觉检查的作用是什么?
  • 【七】设计模式~~~结构型模式~~~桥接模式(Java)
  • Python 教程:使用 pandas 和 glob 库合并多个 Excel 文件
  • 16. Vue-element-template记住密码
  • Python文件打包成exe文件
  • 【简单实用框架】【十大排序算法直接调用】【可移植】
  • 微服务架构之RPC调用
  • One2Multi Graph Autoencoder for Multi-view Graph Clustering
  • Java编程实现输入数的阶乘(for循环):读入一个小于 10 的整数 n,输出它的阶乘 n。(for循环)
  • 算法提高-搜索-FloodFill和最短路
  • 【蓝桥杯单片机第八届国赛真题】
  • 一种简单的Android骨架屏实现方案----0侵入0成本
  • 【Kubernetes 架构】了解 Kubernetes 网络模型
  • shell
  • springboot+ssm+java校园二手物品交易系统vxkyj
  • Android系统内置应用
  • CMMI实施需要准备什么:
  • 【ARM AMBA AXI 入门 1 - AXI 握手协议】
  • 详解uni-app应用生命周期函数
  • 【WebFlux】List指定bean引用对象更新后同步到List
  • 【JavaSE】Java基础语法(二十六):Collection集合
  • jmeter做接口压力测试_jmeter接口性能测试
  • 网络编程 lesson5 IO多路复用
  • 码出高效_第一章 | 有意思的二进制表示及运算
  • 测试类型(单元、集成、系统或手动测试)
  • 【笔试强训编程题】Day3.(字符串中找出连续最长的数字串 69385)和(数组中出现次数超过一半的数字 23271)
  • 学懂缓存雪崩,缓存击穿,缓存穿透仅需一篇,基于Redis讲解