浅析Hive的group by和count(distinct)

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

    首先,Hive的group by和count(distinct)都是去除重复的数据,某种程度上来说,两者产生的结果是一样的。

    实例代码:

select a,count(distinct b) from t group by a
select tt.a,count(tt.b) from (select a,b from t group by a,b)tt group by tt.a

    上面两句代码产生的结果是一样的,但是两者从效率和空间复杂度上来讲,是有很大的差别的。

    distinct会将b列所有的数据保存到内存中,形成一个类似hash的结构,速度是十分的块;但是在大数据背景下,因为b列所有的值都会形成以key值,极有可能发生OOM。

    group by会先把b列的值进行排序,如果以快速派序来说的话,他的空间复杂度就是O(1),时间复杂度是O(nlogn),这样在大数据的环境下,只有排序阶段会比较慢,时间复杂度是O(nlogn)。

    两者比较来说,distinct 耗费内存,但是效率极高,但是数据较大时,可能会产生OOM;group by如果在时间复杂度允许的情况下,可以展现出突出的空间复杂度的优势。

    最后,对于Hive来说,含有distinct的HQL语句,如果遇到瓶颈,想要调优,第一时间都是想到用group by来替换distinct来实现对数据的去重。


同时有COUNT(DISTINCT)和GROUP BY的慢查询sql优化 项目中碰到一个慢查询,里面既有COUNT(DISTINCT),又有GROUP BY,查询性能很差,26万条数据查询下来需要18秒,sql如下 SELECT a.channel_code AS channelCode, a.channel_name AS channelName, DATE_FORMAT(a.create_date, '%Y') AS orderDate, COUNT(DISTINCT a.order_no) AS or... 阅读详情

相关推荐

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

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

2401_83088008的博客 1219

数据库之--count/distinct/group by的用法总结

一、 count、distinct、group by的用法:1.count()函数是用来统计表中记录的一个函数,返回匹配条件的行数,不去重。2.count()语法:(1)count(*)---包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,包含NULL的记录,且不去重。(2)count(1)---第一列,1表示一个固定值,也可以用count(2)、count(3)代替,在统计结...

byf0521hlyp的博客 1万+

如何下载era5数据?(两种方式)

供水利大数据云计算课程同学参考使用#

Camiel_sweet的博客 1万+

count(distinct) 与group by 浅析

在传统关系型数据库中,group by与count(distinct)都是很常见的操作。count(distinct colA)就是将colA中所有出现过的不同值取出来,相信只要接触过数据库的同学都能明白什么意思。count(distinct colA)的操作也可以用group by的方式完成,具体代码如下:select count(distinct colA) from table1; selec

bitcarmanlee的博客 3万+

PaddleOCRv5训练自己的模型-微调文字识别模型

本文介绍了使用PaddleOCR微调文字识别模型的具体步骤。首先需要按照官方格式准备数据集,包括图片和标注文件。然后进行模型训练,包括环境安装、预训练模型下载、配置文件修改等关键环节,特别针对训练中可能出现的类别数不匹配问题提供了三种解决方案。文章还详细说明了模型导出为静态图格式的方法,以及如何调用训练好的模型进行推理。整个过程涉及多个技术细节,如早停机制设置、断点续训方法等,为需要提升OCR识别精度的开发者提供了实用指导。

weixin_43827982的博客 3176

STM32开发工具链选型:MDK、CubeIDE、VSCode与IAR深度对比

嵌入式开发工具链是连接软件逻辑与硬件行为的核心枢纽,其选择直接影响代码可靠性、调试效率与量产稳定性。从编译器优化能力、调试协议支持(如ARM CoreSight、SWO)、硬件抽象层级(寄存器/LL/HAL)到跨平台构建能力,不同工具在实时性保障、静态分析合规性(如MISRA-C)、WCET可预测性及生态开放度上存在本质差异。尤其在STM32平台,Keil MDK凭借深度调试能力成为HardFault定位首选,STM32CubeIDE依托图形化配置加速外设初始化,而VSCode+PlatformIO则以LS

weixin_42602368的博客 429

count distinct

有时候做报表写sql需要用到去重,一般都是考虑到grouy by,distinct,但是我之前还真没有用到过 count distinct ,在此记录一下,虽然有的人说占内存,效率问题,但是确实是一个知识点。 SELECT COUNT(DISTINCT column_name) FROM table_name; 参考: 浅析Hive的group by和count(distinct) 使用...

无名小卒菜的博客 1万+

若依框架-实现管理端与用户端的不同页面布局

我们现在要做的是:管理员登录时展示后台管理端,普通用户登录时展示我们自己写的页面。所以我们可以用v-if来判断登录用户的角色,如果用户角色包含admin,说明是管理员,渲染管理端相关组件,否则渲染用户端组件。不过若依作者的本意还是想退出系统后清空角色信息,所以为了保险期间,我们可以在退出系统后,延迟2秒,再单独清空角色信息。当我们登录管理端后,再退出登录,会有那么一瞬间渲染用户页面,然后才是回到登录界面。这个时候,前端检测到角色信息为空,不包含admin,于是就会渲染用户页面。用来延迟 2 秒执行。

m0_74462339的博客 1566

mysqlsql分组去重计数distinct&count&group by

count 与 distinct 连用,可实现去重计数;加上group by 可实现分组去重计数。

pscool的博客 7200

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek,并借助DuckDuckGo实现联网查询

虎鲸不是鱼 1699

Oracle EBS与SAP数据数据切换至迁移华为MetaERP分析

Oracle EBS到华为MetaERP的数据迁移可采用“表对表复制”思路,因其模块化设计下数据模型标准化、边界清晰。核心业务对象存储在结构明确的主表中,与MetaERP模型兼容度高,便于直接映射。而SAP到MetaERP的迁移则因SAP高度优化的复杂表结构(如簇表/池表)、数据分散冗余、深度依赖配置等特点,无法简单复制,必须采用基于业务对象的迁移方法,通过视图/BAPI提取数据并进行深度转换。两种迁移的本质差异源于源系统的数据模型设计理念不同。

金牌架构师 1379

关于hive中的count与group by的总结

Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。  注意:group by 是先排序后分组;  count :. 1、 并不是说group by和count()操作不能同时使用,只是说查出来的东西不一样,每个都有其应用的情况,如本例:最开始方法查出来的就...

Griezmann_7的博客 9919

[QMT量化交易小白入门]-五十、十年基本保证每年盈利,全天ETF候稳稳的幸福

全局参数raise_rate = -1 # 触发rebalance的上涨比例period: 设定为22,表示每22个交易日执行一次调仓(即大约每月一次)。这是策略的时间框架基础。raise_rate: 初始值设为-1,意味着默认情况下不会因为资产的涨幅而触发调仓。这一参数用于控制是否基于资产表现动态调整仓位。run_count: 用于记录策略运行的次数,帮助判断何时执行定期调仓。1、为了简便计算,回撤时将调仓再平衡是先卖出再买入,没有比较持仓,实盘时是需要计算的,减少交易费用。

木头大左的博客 806

大数据Hive之group by、count、over

group by和count在Hive与mysql用法基本一致, 今天说一下group by、count组合用法在hive中的需要注意的地方,以及实现一个功能的sql写法 目标:统计表中id和总条数 模型:tab(id string) 输出:id、count(*) 需求1:输出表中总记录数 select count(*) from tab; 需求2:输出表中id,总条数 select id,count(*) from tab; 这样计算就会报错 解决方式两...

luo981695830的博客 2757

基于AnimeGAN模型生成宫崎骏风格动漫照片

用于动画风格纹理和线条转换的灰度样式丢失;新颖的颜色重建损失,以保留内容图像的颜色;新的灰度对抗损失防止生成的图像从显示为灰度图像;使用深度可分卷积和反向残块的轻量级生成器,以实现更快的传输。实验表明,AnimeGAN可以对真实世界的照片进行变换场景动画风格的图像与高质量的动画视觉效果和显著优于最先进的风格化方法。# 生成宫崎骏风格图片 model = hub . Module('animegan_v1_hayao_60' , use_gpu = True)images:输入的图片数据。

优快云 精品推荐 3630

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

distinct和group by去重逻辑浅析

在数据库操作中,我们常常遇到需要将数据去重计数的工作。例如: 表A,列col A C A B C D A B 结果就是一共出现4个不同的字母A、B、C、D 即结果为4 大体上我们可以选择count(distinct col)的方法和group+count的方法。 分别为: select count(distinct col) from A; select count(1) from (select 1 from A group by col) alias; 两中方法实现有什么不同呢? 其实上述两中方

eden_Liang的博客 1518

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Hive三种去重方法,distinct,group by与ROW_Number()窗口函数

订阅专栏 一、distinct,group by与ROW_Number()窗口函数使用方法 1. Distinct用法:对select 后面所有字段去重,并不能只对一列去重。 (1)当distinct应用到多个字段的时候,distinct必须放在开头,其应用的范围是其后面的所有字段,而不只是紧挨着它的一个字段,而且distinct只能放到所有字段的前面 (2)distinct对NULL是不进行过滤的,即返回的结果中是包含NULL值的 (3)聚合函数中的DISTINCT,如 COUNT( ) 会过滤掉为.

u011250186的博客 6110

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Hive查询中的优化

hive使用group by代替distinct去重

November、Chopin 952

Hive--count(distinct)优化

前言 使用count distinct计算两列联合去重时,若有任何一列为NULL,那么count计数时就会略过这一条。 如:count(distinct a,b) 若a或者b中有一个是null,那么这一行就不会参与计数 平台:hive、mysql都是如此 id tools name 1 hive a 2 hive b 3 hive NULL 4 NULL m 6 观察以下代码执行结果 ...

qq_46893497的博客 4655

Hive 调优 Group By 、Count(distinct)、笛卡尔积

Group By 默认情况下,Map阶段同一Key数据分发给一个reduce,当一个key数据过大时就倾斜了。 并不是所有的聚合操作都需要在Reduce端完成,很多聚合操作都可以先在Map端进行部分聚合,最后在Reduce端得出最终结果。 开启Map端聚合参数设置 (1)是否在Map端进行聚合,默认为True set hive.map.aggr = true; (2)在Map端进行聚合操作的条目...

大数据流浪法师的学习笔记与分享 1478

关于distinct 和group by的去重逻辑浅析

在数据库操作中,我们常常遇到需要将数据去重计数的工作。例如: 表A,列col A C A B C D A B   结果就是一共出现4个不同的字母A、B、C、D 即结果为4 大体上我们可以选择count(distinct col)的方法和group+count的方法。 分别为: select count(distinct col) from A; select co...

liuzhiqiangruc 3029

hive使用技巧(三)——巧用group by实现去重统计

网站统计中常用的指标,pv ,uv , 独立IP,登录用户等,都涉及去重操作。全年的统计,PV超过100亿以上。即使是简单的去重统计也非常困

Ganymede的Hadoop世界 3万+

hive中Distinct和group by去重的对比

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

XMZHSY的博客 3018

Hive数据去重的两种方式:DISTINCT与GROUP BY

在Hive的数据分析与处理过程中,去重操作是确保数据质量的关键步骤。DISTINCT和GROUP BY是实现数据去重的两种主要方法,各自具有不同的特点和使用场景。DISTINCT适用于简单去重,尤其在数据量较小的情况下表现良好。GROUP BY则更适合于需要进行聚合分析的大型数据集,并且在性能上通常更具优势。通过了解这两种方法的基本概念、使用场景和性能比较,数据分析师和工程师可以根据具体的需求选择合适的去重策略,从而提高数据处理效率和分析的准确性。在实际应用中,结合最佳实践,灵活运用DISTINCT与。

My_wife_QBL的博客 2022
下一篇: 浅析Hive的四种排序方式
DM_Source
博客等级 码龄9年 33粉丝 12原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值