hive中Distinct和group by去重的对比

这篇具有很好参考价值的文章主要介绍了hive中Distinct和group by去重的对比。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在Hive中, DISTINCT和GROUP BY都可以用于去重,但是它们背后的实现方式是不同的,因此它们的效率也是不同的。

        DISTINCT是一种去重方法,它会扫描整个数据集,然后将重复的记录删除,只留下唯一的记录。由于DISTINCT需要扫描整个数据集,因此它在处理大量数据时可能会更慢,在内存和I/O方面的开销也相对较高。尤其是当数据集比较大时,DISTINCT可能会出现性能瓶颈,并可能导致OOM(Out of Memory)等异常。

        GROUP BY也可以用于去重,但与DISTINCT不同,它可以在数据流中即时地进行去重处理,因此它的效率更高。GROUP BY会按照指定的逻辑条件将数据分组,并对每个分组进行统计,最后将分组的结果集合并在一起。相比之下,GROUP BY所需的内存和I/O开销相对比较小,处理大量数据时延迟和崩溃的概率相对较低

         因此,在大多数情况下,使用GROUP BY来去重是比使用DISTINCT更有效的方法,除非对完全去除重复记录有特殊需求。

        从底层代码角度来看,DISTINCT和GROUP BY共有三点不同。

DISTINCT GROUP BY

底层数据结构不同

在 Hive 中,DISTINCT 查询一般会转化为 Map Reduce 任务

Mapper 阶段的主要任务是将输入数据进行转换,并且将每个不同的值作为 key 输出。

Reducer 阶段的主要任务是将相同 key 的数据进行合并,并且将 key 输出到最终结果中。

这个过程的执行需要消耗大量的计算资源和 I/O 开销,因此在处理大规模数据时,DISTINCT 查询的性能较低,可能会出现运行时错误或者内存溢出(OOM)等情况

在hive中,GROUP BY 查询通常会通过 HashTable 实现,其底层数据结构为 HashSet 或 HashMap,因为HashTable可以实现快速的数据查找和去重

HashSet和HashMap的插入、删除、查找等操作的时间复杂度均为O(1),是极其高效的数据结构

内存消耗不同

DISTINCT 查询会对原始数据进行排序,需要较大的缓存空间,内存占用较大

GROUP BY 查询对空间的需求较小,因为其底层数据结构已经是去重的,因此可以节省内存开销

数据分布和并行度不同

DISTINCT 查询要求所有相同数据位于同一分区,可能存在临时 I/O 操作所导致的性能问题

GROUP BY 查询则允许在并行处理过程中处理分布式数据,并且支持对不同分组进行独立处理,因此并行度较高。

总结
  • GROUP BY 查询的底层数据结构、内存消耗、数据分布和并行度等方面都比 DISTINCT 更加优秀。
  • 因此,在实际应用中,如果需要处理大数据量、高并发的场景,建议优先选择 GROUP BY 查询

路漫漫其修远兮,吾将上下而求索。                ---屈原文章来源地址https://www.toymoban.com/news/detail-756352.html

到了这里,关于hive中Distinct和group by去重的对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL 中的 distinct 和 group by 哪个效率更高?

    在语义相同,有索引的情况下:group by和distinct都能使用索引,效率相同。 在语义相同,无索引的情况下:distinct效率高于group by。原因是distinct 和 group by都会进行分组操作,但group by可能会进行排序,触发filesort,导致sql执行效率低下。 DISTINCT 用于返回唯一不同的值。

    2024年01月23日
    浏览(34)
  • 【flink番外篇】9、Flink Table API 支持的操作示例(6)- 表的聚合(group by、Distinct、GroupBy/Over Window Aggregation)操作

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月02日
    浏览(28)
  • MongoDB——去重函数Distinct

    MongoDB的distinct方法可以用于检索指定字段的唯一值,以下是对MongoDB distinct的阐述: 一、distinct方法的语法 distinct方法包含三个参数,field表示要检索唯一值的字段,query表示检索时使用的查询语句,options包括projection和sort等选项。 二、distinct的基本用法 在collection中使用disti

    2024年01月24日
    浏览(32)
  • Mysql 数据库去重(distinct)

    有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段 distinct 这种方式会将全部内容存储在一

    2024年02月13日
    浏览(28)
  • Spark的dropDuplicates或distinct 对数据去重

    消除重复的数据可以通过使用 distinct 和 dropDuplicates 两个方法。 distinct 是所有的列进行去重的操作,假如你的 DataFrame里面有10列,那么只有这10列完全相同才会去重。 使用distinct:返回当前DataFrame中不重复的Row记录。该方法和接下来的dropDuplicates()方法不传入指定字段时的结果

    2024年02月16日
    浏览(27)
  • java stream distinct根据list某个字段去重

    java stream distinct根据list某个字段去重,普通List简单去重: 很显然这种满足不了需求,我们List里的是实体对象,这里的是字符串。 首先创建了一个Student类,该类包含id、name、age三个字段,使用了注解@Data,我们想根据学生的name去重。 一、Stream流 + TreeSet(推荐) 根据学生的

    2024年01月17日
    浏览(38)
  • 【数据库】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函数实现去重查询

    在PostgreSQL中,我们可以使用 SELECT DISTINCT 和 SUBSTRING 函数来实现对某个字段进行去重查询。本文将介绍如何使用这两个函数来实现对 resource_version 字段的去重查询。 1. SELECT DISTINCT 语句 SELECT DISTINCT 语句用于从表中选择不重复的记录。如果没有指定列名,则会选择所有列。在本

    2024年02月14日
    浏览(30)
  • SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY 详解

    SQL的SELECT语句用于从数据库中选择数据。SELECT语句的基本语法如下: 其中, column1 , column2 ,等是您要从表中选择的字段名称,而 table_name 是您要选择数据的表的名称。 如果要选择表中的所有列,您可以使用 SELECT * 语法。 以下是一些示例: 从Customers表中选择 CustomerName 和 Ci

    2024年02月05日
    浏览(49)
  • Elasticsearch按某个字段去重-实现group by效果

    已知es中存储了一张学生课程信息宽表,里边包含有student_name、student_id、teacher_id、课程信息等字段。 现在根据学生姓名或者班级ID,得出学生所在班级的所有授课教师信息。  既然是明细宽表,里边的教师的信息必然是有重复的,因此我们需要查询teacher_id的集合并去重,对

    2024年02月12日
    浏览(32)
  • 【数据库】PostgreSQL中的DISTINCT ON和DISTINCT的区别

    在数据库查询中,我们经常会遇到需要去除重复数据的情况。在PostgreSQL中,我们可以使用DISTINCT和DISTINCT ON来实现这个目标。那么,它们之间有什么区别呢?本文将详细介绍这两种方法的用法、区别以及适用场景。 DISTINCT是SQL中的一个,用于从查询结果中去除重复的行

    2024年02月03日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包