当前位置: 首页 > 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
http://www.lryc.cn/news/300421.html

相关文章:

  • Django模板(二)
  • 勒索病毒最新变种.faust勒索病毒来袭,如何恢复受感染的数据?
  • python 人脸检测器
  • 机器学习与深度学习
  • 算法训练营day27(补),贪心算法1
  • [office] excel2003限定单元格输入值范围教程 #微信#经验分享
  • OLED显示红外遥控键码
  • LabVIEW智能温度监控系统
  • 专业140+总分420+浙江大学842信号系统与数字电路考研经验电子信息与通信,真题,大纲,参考书。
  • C语言学习day15:数组强化训练
  • 缓存穿透、缓存击穿与缓存雪崩
  • 一周学会Django5 Python Web开发-项目配置settings.py文件-模版配置
  • CF1845 D. Rating System [思维题+数形结合]
  • HeidiSQL安装配置(基于小皮面板(phpstudy))连接MySQL
  • 【蓝桥2013】错误票据
  • nvm对node版本进行管理及疑难解决,vue项目搭建与启动
  • Redisson分布式锁 原理 + 运用 记录
  • Spring Boot 笔记 021 项目部署
  • 新技术革命开始了,Sora一出,所有的视频人、电影人都下岗
  • 【FPGA开发】Modelsim和Vivado的使用
  • 现代浏览器对 es模块 【esm】原生支持
  • 修改SpringBoot中默认依赖版本
  • 网络安全最典型基础靶场-DVWA-本地搭建与初始化
  • 算法-----高精度2(高精度乘法,高精度除法,高精度斐波那锲数列)
  • windows vs 自己编译源码 leveldb 然后使用自己编译的文件
  • 基于GPT一键完成数据分析全流程的AI Agent: Streamline Analyst
  • C语言-----习题
  • Java学习笔记(五)
  • 4.【Linux】进程控制(进程终止||进程等待||程序替换)
  • 微服务设计:Spring Cloud 链路追踪概述