hive group by | distinct区别以及性能比较

关于HIVE的SELECT count(*) 优化 刚刚下载了一份HIVE的最新源码。 印象最深的是HIVE将表的大小作为了元数据保存在了关系数据库中。 譬如在老版本中执行如下的语句: from base insert overwrite table user select * ; 你会发现日志的末尾会有 “999 ROWD LOADED INTO TABLE USER” 的字样 代表有999条目记录保存在了user表 阅读详情

Hive去重统计

去重方式:

  • Distinct
  • Group by

实际论证

order_snap为订单的快照表 总记录条数763191489,即将近8亿条记录,总大小:108.877GB,存储的是公司所有的订单信息,表的字段大概有20个,其中订单号是没有重复的,所以在统计总共有多少订单号的时候去重不去重结果都一样,我们来看看:
统计所有的订单有多少条条数,一个count函数就可以搞定的sql性能如何。

Distinct

select count(distinct order_no) from order_snap;

Stage-Stage-1: Map: 396 Reduce: 1 Cumulative CPU: 7915.67 sec HDFS Read: 119072894175 HDFS Write: 10 SUCCESS

Total MapReduce CPU Time Spent: 0 days 2 hours 11 minutes 55 seconds 670 msec

OK

_c0

763191489

Time taken: 1818.864 seconds, Fetched: 1 row(s)

Group by

select count(t.order_no) from (select order_no from order_snap group by order_no) t;

Stage-Stage-1: Map: 396 Reduce: 457 Cumulative CPU: 10056.7 sec HDFS Read: 119074266583 HDFS Write: 53469 SUCCESS

Stage-Stage-2: Map: 177 Reduce: 1 Cumulative CPU: 280.22 sec HDFS Read: 472596 HDFS Write: 10 SUCCESS

Total MapReduce CPU Time Spent: 0 days 2 hours 52 minutes 16 seconds 920 msec

OK

_c0

763191489

Time taken: 244.192 seconds, Fetched: 1 row(s)

小结

结论:第二种写法的性能是第一种的7.448499541倍
注意到为什么会有这个差异,Hadoop其实就是处理大数据的,Hive并不怕数据有多大,怕的就是数据倾斜,我们看看两者的输出信息:

# distinct

Stage-Stage-1: Map: 396 Reduce: 1 Cumulative CPU: 7915.67 sec HDFS Read: 119072894175 HDFS Write: 10 SUCCESS

# group by

Stage-Stage-1: Map: 396 Reduce: 457 Cumulative CPU: 10056.7 sec HDFS Read: 119074266583 HDFS Write: 53469 SUCCESS

发现猫腻了没有,使用distinct会将所有的order_no都shuffle到一个reducer里面,这就是我们所说的数据倾斜,都倾斜到一个reducer这样性能能不低么?再看第二个,直接按订单号分组,起了457个reducer,将数据分布到多台机器上执行,时间当然快了.
由于没有手动指定Reduce的个数,Hive会根据数据的大小动态的指定Reduce大小,你也可以手动指定

hive> set mapred.reduce.tasks=100;

结论

能使用group by代替distinc就不要使用distinct

数据去重,用DISTINCT还是GROUP BY? MapReduce Job卡在了最后一个ReduceTask,任务迟迟未运行成功,ReduceTask只有一个如果某个Job任务卡在99%不动,例如,某个Reduce的时间比其他Reduce时间长的多,大部分Task在1分钟左右完成,只有一个Task执行20多分钟还没完成。这时我们就应该考虑出现数据倾斜了如果每个ReduceTask执行时间差不多,都特别长,不一定是数据倾斜导致的,可能是ReduceTask设置过少导致的。这时可以调整ReduceTask个数。 阅读详情

相关推荐

【Hive】GROUP BY 执行原理-大数据开发高频面试题

   Hive 的执行原理是高频面试题。因为后面的调优或者数据倾斜的处理都是在对其执行原理清楚的基础上进行的。今天以 GROUP BY 为例讲解一下。 1.直观的角度 下表名叫 table1: id name number 1 aaa 2 2 aaa 3 3 bbb 4 4 bbb 5 5 ccc 6 6 ddd 7 7 eee 7 8 bbb 5 9 ccc 6 如果执行下面的语句: SELECT name FROM table1 GROUP BY na

每天更新大数据面经和技术 925

hive中Distinct和group by去重的对比

在Hive中, DISTINCT和GROUP BY都可以用于去重,但是它们背后的实现方式是不同的,因此它们的效率也是不同的。GROUP BY会按照指定的逻辑条件将数据分组,并对每个分组进行统计,最后将分组的结果集合并在一起。DISTINCT是一种去重方法,它会扫描整个数据集,然后将重复的记录删除,只留下唯一的记录。GROUP BY也可以用于去重,但与DISTINCT不同,它可以在数据流中即时地进行去重处理,因此它的。GROUP BY 查询对空间的需求较小,因为其底层数据结构已经是去重的,因此可以。

XMZHSY的博客 3018

Hive去重:distinct与group by

Hive对数据去重有两种方法:(1) distinct (2) group by 本文介绍distinct、group by在去重时底层的执行逻辑、数据处理原理,并介绍在不同场景下,应采用哪种方法去重。

张之海的博客 3138

Hive查询中的优化

hive使用group by代替distinct去重

November、Chopin 952

Hive 去重性能对比:GROUP BY vs DISTINCT

在无聚合函数的去重场景下,GROUP BY 的性能显著优于 DISTINCT,因为它可以直接在 Map 端完成去重操作,减少了数据传输和处理开销。在需要进行聚合计算的场景下,GROUP BY 是唯一的选择,并且可以通过开启 Map 端聚合功能来优化性能。数据倾斜是 Hive 性能优化中需要重点关注的问题,可以通过 DISTRIBUTE BY 语句、添加随机前缀和使用分桶表等方法来缓解数据倾斜问题。

2401_83088008的博客 1221

异步复位同步释放:如何确保复位信号的可靠性与时序安全

本文深入探讨了异步复位同步释放技术在数字电路设计中的关键作用,详细分析了复位信号的可靠性与时序安全问题。通过对比异步复位与同步复位的本质区别,揭示异步复位的优势与潜在风险,并提供了标准的Verilog实现方案。文章还涵盖了多时钟域下的复位同步策略、复位网络时序约束方法以及实际工程中的经验教训,为数字系统设计者提供了全面的复位信号处理指南。

weixin_29213655的博客 400

hive group by distinct区别以及性能比较

Hive去重统计 相信使用Hive的人平时会经常用到去重统计之类的吧,但是好像平时很少关注这个去重的性能问题,但是当一个表的数据量非常大的时候,会发现一个简单的count(distinct order_no)这种语句跑的特别慢,和直接运行count(order_no)的时间差了很多,于是研究了一下。 先说结论:能使用group by代替distinc就不要使用distinct,例子: 实际论

似水流年 3万+

UG NX与PLC-1500的在环虚拟测试

TIA、PLCSIM、NetToPLCsim、KEPServerEX以及UG NX的在环虚拟测试

lvtlvtlvtlvt的博客 4220

hive的group by与distinct的区别及性能测试比较

Hive去重统计 相信使用Hive的人平时会经常用到去重统计之类的吧,但是好像平时很少关注这个去重的性能问题,但是当一个表的数据量非常大的时候,会发现一个简单的count(distinct order_no)这种语句跑的特别慢,和直接运行count(order_no)的时间差了很多,于是研究了一下。 先说结论:能使用group by代替distinc就不要使用distinct,例子: 实际论证 order_snap为订单的快照表 总记录条数763191489,即将近8亿条记录,总大小:108.877GB,存

bboy枫亭的博客 1080

UE5 C++教程(一、基本结构)

虚幻API由三块组成,分别是Runtime,Developer utilitiew,functionality for the Editor,大多数游戏性编程只使用运行时模块,最常见的三个是Corn、CornUObject和Engine。

skycol的博客 1万+

调用D3D11硬解码和渲染VideoProcessor版本

在https://blog.youkuaiyun.com/robothn/article/details/78781321一文中使用shader来显示FFMPEG硬解码后的YUV420P,本文调用D3D11的videoprocessor来进行图像空间变换和尺寸变换,取得了较好的效果。 1.初始化D3D11设备、videodevice等数据结构 FFMPEG调用D3D11硬解码,获取其对应的device,videodevice。。。 FFMPEG使用av_hwdevice_find_type_by_name调用D3d11

zlyadvocate的博客 9285

hive group by distinct区别以及性能比较

Hive去重统计 相信使用Hive的人平时会经常用到去重统计之类的吧,但是好像平时很少关注这个去重的性能问题,但是当一个表的数据量非常大的时候,会发现一个简单的count(distinct order_no)这种语句跑的特别慢,和直接运行count(order_no)的时间差了很多,于是研究了一下。 先说结论:能使用group by代替distinc就不要使用distinct,例子: 实际论证...

chenpe32cp的博客 951

如何用matlab扫频法测考虑频率耦合的并网逆变器的序阻抗,如何实现?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1193

hive之group by详解

有部分是转自:https://blog.youkuaiyun.com/lzm1340458776/article/details/43230517hive distribute by 和group by 的区别:group by是对检索结果的保留行进行单纯分组,一般总爱和聚合函数一块用例如AVG(),COUNT(),max(),main()等一块用。 group by操作表示按照某些字段的值进行分组,有相同的...

我的博客 5万+

基于YOLOv11的军事目标识别系统设计与实现(坦克、舰船检测)

DOTA-v2.0(包含多种军事装备的航拍图像)图片数量:11,268类别:18类,包括坦克、舰船、战斗机等分辨率:800×800~4000×4000HRSC2016(高分辨率舰船检测数据集)图片数量:1,061类别:舰船及子类特点:包含多种视角和复杂背景图片数量:5,000+类别:22种军用飞机标注:精确边界框自建数据集建议收集来源:公开军事演习视频、卫星图像、模拟游戏截图数据增强:模拟不同天气、遮挡、低光照等战场环境。

YOLO 450

092、Python在芯片验证中的应用:从脚本小子到验证架构师

Python在芯片验证中的高效应用 本文通过实际案例展示了Python在芯片验证中的关键作用。凌晨三点的调试场景揭示了传统方法的局限,Python脚本能在20分钟内分析80GB波形数据定位FIFO指针问题。文章重点介绍了两个核心工具: 智能日志分析系统:通过正则表达式和上下文分析,自动分类百万行验证日志中的错误,生成可视化报告,效率远超传统grep方法。 寄存器模型生成器:将Excel表格自动转换为UVM寄存器模型代码,将原本需要两周的手工工作缩短至两小时,同时保证零错误。 文章还展示了Python与Sys

z534437748的博客 72

hive 中 group by 和 distinct 孰优孰劣?

为什么distinct 和 group by 都调用了 18 个 reduce 任务,distinct 的时间还花费的少一些,其实在数据量不大的情况下,distinct 和 group by的差别不是很大。map早就完工了,reduce阶段一直卡在99%,而且cumulative cpu的时间还一直在增长,说明整个job还在后台跑着。Hive的执行是分阶段的,map处理数据量的差异取决于上一个stage的reduce输出,所以如何将数据均匀的分配到各个reduce中,就是解决数据倾斜的根本所在。

SevenCoding的博客 792

【大模型】DeepSeek 高级提示词技巧使用详解

DeepSeek 高级提示词技巧使用详解

congge 1万+

Hive 中 group by 和 distinct的区别

DISTINCT本质是GROUP BY的语法糖,在 Hive 中性能相当或略差;而GROUP BY更灵活、可优化、支持聚合,是生产环境的首选。尤其对于,应主动改写为子查询 +GROUP BY避免性能灾难。

走过冬季 420

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Hive中distinct和group by去重性能对比

前言 操作系统:CentOS 7 hadoop:2.7.7 hive:2.3.0 实验目的:本文主要测试在某字段各种不同值个数情况下,记录对此字段其使用DISTINCT/GROUP BY去重的查询语句执行时间,对比两者在不同场景下的去重性能 实验表格: 表名 记录数 查询字段不同值个数 DISTINCT GROUP BY tab_1 100000 3 tab_2 100000 10000 实验过程 1)创建测试用表 drop table if exists tab_1;

TomAndersen的博客 828

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

hive之group by的用法

一,GROUP BY 执行理解 先来看下表1,表名为test: 表1   执行如下SQL语句: SELECT name from test GROUP BY name ; 你应该很容易知道运行的结果,没错,就是下表2: 表2   可是为了能够更好的理解“group by”多个列“和”聚合函数“的应用,我建议在思考的过程中,由表1到表2的过程中,增加一个虚构的中间表:...

xiaoyutongxue6的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Hive之GROUP BY详解

一,GROUP BY 执行理解 先来看下表1,表名为test: 表1   执行如下SQL语句: SELECT name from test GROUP BY name ; 你应该很容易知道运行的结果,没错,就是下表2: 表2   可是为了能够更好的理解“group by”多个列“和”聚合函数“的应用,我建议在思考的过程中,由表1到表2的过程中,增加一个虚构...

LZW760907的博客 1105

hive中groupby和distinct区别以及性能比较

Hive去重统计 经常在公司还能看到。很多老人用distinct去重,很容易数据量大的时候的数据倾斜。感谢上次冲哥的指正。 相信使用Hive的人平时会经常用到去重统计之类的吧,但是好像平时很少关注这个去重的性能问题,但是当一个表的数据量非常大的时候,会发现一个简单的count(distinct order_no)这种语句跑的特别慢,和直接运行count(order_no)的时间差了很多,于是研...

weixin_30834783的博客 471

Hive -【group by】深刻理解,以及数据倾斜、与distinct区别(去重统计)

Hive【group by】深刻理解

神是念着倒 3949
上一篇: 磁盘挂载工程师
下一篇: [Hadoop]数据复制distcp vs cp
yjgithub
博客等级 码龄11年 53粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值