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

(04)Hive的相关概念——order by 、sort by、distribute by 、cluster by

Hive中的排序通常涉及到order by 、sort by、distribute by 、cluster by 

一、语法


selectcolumn1,column2, ...
from table 
[where 条件] 
[group by column]
[order by column] 
[cluster by column| [distribute by column] [sort by column] 
[limit [offset,] rows];

二、排序介绍

2.1 order by

 Hive的order by 与其他的sql一样,对所有数据进行排序,全局排序,只有一个 Reducer在严格模式(set hive.mapred.mode=strict)下,执行order by 必须加上limit 子句,避免数据集行数过大。order by 字段 ,默认是升序。

2.2 distribute by和sort by

    针对order by的缺点,Hive提供了distribute by 分区和sort by 排序。例如: select *  from user_info distribute by user_id sort by login_date desc;

  • distribute by

       shuffle阶段,基于key值,可以控制数据发往具体某个分区 ,相同key的数据会分发到同一个reduceTask中。

      distribute by类似 MR 中的自定义分区 partition ,distribute by 的分区规则是:分区字段的hashcode值对reduce 个数取模后余数相同的数据会分发到同一个reduceTask中。

  • sort by

      指定sort by后,可以在每个reducer端做排序,即可以保证局部有序(每个reducer出来的数据是有序的,但是不能保证所有的数据是有序的,除非只有一个reducer)。

     指定sort by好处是:执行了局部排序之后可以为接下去的全局排序提高不少的效率。

2.3 cluster by

    当 distribute by sorts by 字段相同时,可以使用 cluster by 方式。 但是排序 只能是升序
排序, 不能指定排序规则为 acs  或者 desc
select *  from user_info distribute by user_id sort by user_id;
--等价于
select *  from user_info cluster by user_id;

三、总结

  • order by全局排序,只有一个reducer,结果输出在一个文件中,当数据量较大时,需要较长的计算时间;
  • distribute by根据指定字段将数据分组,分组编号 = 【字段的hashcode 】% 【reduce数】,sort by是在分组之后,每个组内局部排序,即保障了每个reducer端的数据有序;
  • cluster by既有分组,又有排序,前提是分组与排序字段相同,当distribute和sort的字段是同一个时,cluster by = distribute by + sort by

相关文章:

  • html从零开始8:css3新特性、动画、媒体查询、雪碧图、字体图标【搬代码】
  • 【C语言】指针练习篇(下),深入理解指针---指针练习题【图文讲解,详细解答】
  • Python循环语句——for循环的嵌套使用
  • Java学习第十六节之创建对象内存分析和小结类与对象
  • Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL
  • Godot 游戏引擎个人评价和2024年规划(无代码)
  • QtApplets-线程池
  • MinGW/MSYS/GCC/GNU/MSVC/Clang/LLVM都是什么
  • 防火墙HA详解
  • 问题:内存时序参数 CASLatency 是() #学习方法#微信#微信
  • 防御保护--内容安全过滤
  • C++ 音视频原理
  • 跟着pink老师前端入门教程(JavaScript)-day02
  • OpenAl 视频生成模型 —— Sora技术报告解读
  • Excel模板2:进度条甘特图
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Android单元测试 - 几个重要问题
  • ECMAScript6(0):ES6简明参考手册
  • gulp 教程
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • in typeof instanceof ===这些运算符有什么作用
  • Java教程_软件开发基础
  • JS专题之继承
  • python学习笔记 - ThreadLocal
  • Python学习之路16-使用API
  • React-生命周期杂记
  • sublime配置文件
  • vue-router的history模式发布配置
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端面试之闭包
  • 人脸识别最新开发经验demo
  • 使用 @font-face
  • 微信开源mars源码分析1—上层samples分析
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 【干货分享】dos命令大全
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​批处理文件中的errorlevel用法
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (SpringBoot)第二章:Spring创建和使用
  • (编译到47%失败)to be deleted
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (实战篇)如何缓存数据
  • (转)视频码率,帧率和分辨率的联系与区别
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • . NET自动找可写目录
  • .net core webapi 大文件上传到wwwroot文件夹
  • .Net IOC框架入门之一 Unity
  • .NET Micro Framework初体验
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @ModelAttribute注解使用
  • [100天算法】-x 的平方根(day 61)
  • [20150321]索引空块的问题.txt