Hive的排序——order by 、sort by、distribute by 、cluster by

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

一、语法

sql 复制代码
select
        column1,
        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 。

sql 复制代码
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
相关推荐
kylezhao20191 小时前
深入浅出地理解 C# WPF 中的属性
hadoop·c#·wpf
迎仔2 小时前
01-Hadoop 核心三剑客通俗指南:从“单机搬砖”到“包工队”
大数据·hadoop·分布式
TTBIGDATA6 小时前
【Ranger】Ranger Admin 配置 Knox 策略时出现,the trustAnchors parameter must be non-empty
大数据·hadoop·ambari·kerberos·ranger·knox·bigtop
BYSJMG7 小时前
计算机毕设推荐:基于大数据的各省碳排放数据分析与可视化系统实战
大数据·vue.js·hadoop·后端·信息可视化·数据分析·课程设计
市场部需要一个软件开发岗位1 天前
数据仓库相关内容分享
数据库·数据仓库·oracle
BYSJMG1 天前
计算机毕设选题推荐:基于Hadoop的交通事故数据可视化分析系统
大数据·vue.js·hadoop·分布式·后端·信息可视化·课程设计
Gain_chance1 天前
32-学习笔记尚硅谷数仓搭建-DWD层首日数据装载脚本及每日数据装载脚本
大数据·数据仓库·hive·笔记·学习
sheji34161 天前
【开题答辩全过程】以 基于hadoop的空气质量数据分析及可视化系统为例,包含答辩的问题和答案
大数据·hadoop·数据分析
Gain_chance1 天前
29-学习笔记尚硅谷数仓搭建-DWD层交易域下单事务事实表和交易域支付成功事务事实表
数据仓库·hive·笔记·学习·datagrip
Zilliz Planet1 天前
<span class=“js_title_inner“>Spark做ETL,与Ray/Daft做特征工程的区别在哪里,如何选型?</span>
大数据·数据仓库·分布式·spark·etl