`
381573578
  • 浏览: 72172 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

hive查询相关

 
阅读更多

一、嵌套查询统计数量去重问题

描述:如果子查询中对统计的字段已经去重,外面一层就不能同时有distinct(目标统计字段)和group by操作,否则查询结果不是统计的数量而是统计的字段数据。

如:

select

  • platform_id, count(distinct user_id) uv_count

from

  • (
    • select
      • platform_id, user_id, sum(pv) pv
      from depot_user_browse
    • where day = '20140201'
      • and (
        • platform_id = 12
        • or platform_id = 6
        • or platform_id = 11
        • or platform_id = 14
        • )
        and user_id is not null
      group by platform_id,user_id
    ) a

group by platform_id

limit 10;

查询结果:

  • 6 10000242
  • 6 10000332
  • 6 10000468
  • 6 10001799
  • 6 10001809
  • 6 10002210
  • 6 10002753
  • 6 10003070
  • 6 10003815
  • 6 10004929

解释:该查询中里面嵌套的一层已经group by user_id所以user_id不会有重复,最外层再distinct user_id同时group by platform_id时,查询的结果就成了platform_id和user_id而不是count出来的数量,如果distinct和group by只有其中一个操作就不会有这种现象。

解决办法:将count(distinct user_id) 改为count(user_id).

二、多次嵌套查询聚合问题

描述:如果子查询嵌套的层次过多,同时查询的数据量较大,在自由分配的情况下数据会被分到多个reducers中分别计算,计算完成后不会再进行聚合,而是把每个reduce算完的结果查询出来。

如:

查询结果:

select a.userid,sum(a.pv) pv

  • from(
    • select c.userid,c.bookid,c.url,count(1) pv from(
      • select userid,bookid,url
        • from log
        • where day='20140201'
        • and logtype='access'
        • and project='android'
        • and actionname='read'
          • and (apiCode= or apiCode ='100')

    • ) c
      • group by c.userid,c.bookid,c.url
    )a where a.userid = '21057243' group by a.userid;

查询结果:

  • 21057243 5
  • 21057243 16
  • 21057243 5
  • 21057243 16
  • 21057243 8

查询时分配的mappers和reducers:

  • number of mappers: 635; number of reducers: 6

解释:该查询的最外层已经有group by userid,按正常逻辑最后查询结果应该是一条数据,但是在查询过程中分配了6个reducers最后就把6个分别查出来,很容易导致最后统计错误。

解决方法:在查询时将reducers设为1,即set mapred.reduce.tasks=1;

分享到:
评论

相关推荐

    java_hive简单查询

    在实际项目中,你可能需要构建一个包含Hive查询逻辑的Java类,并将其打包成jar文件,然后在Hadoop集群上运行。 7. **提交Java作业到Hadoop集群**: 如果需要在集群上运行Java程序,可以使用`Hadoop`的`hadoop jar`...

    hive相关jar包

    "hive相关jar包"指的是为了与Hive交互、执行Hive查询所必需的Java库文件。这些jar包包含了Hive的执行引擎、元数据存储以及SQL解析等组件。 在描述中提到的"最新3.1.1版本",意味着这些jar包对应的是Hive 3.1.1这个...

    HIVE相关的jar包

    这些jar包也用于在MapReduce、Tez或Spark等计算框架上运行Hive查询。 在Hive的不同版本之间,jar包可能会有所变化,因为每个新版本可能引入了新的特性和改进,或者修复了一些已知问题。例如,一个较早版本的Hive...

    Hive 对 Protobuf 序列化文件读取.zip

    本篇将重点讲解如何利用Hive对Protobuf序列化的文件进行读取,以及相关的技术细节。 首先,了解Protobuf(Protocol Buffers)。这是Google开发的一种数据序列化协议,用于结构化数据的序列化,可以看作是XML、JSON...

    hive2.1.1中orc格式读取报数组越界错误解决方法

    在描述中提到的解决方案是替换相关的jar包,具体为`hive-exec-2.1.1-cdh6.3.2.jar`和`hive-orc-2.1.1-cdh6.3.2.jar`。这两个jar包分别是Hive执行引擎和ORC文件格式处理的实现,更新它们可能是为了修复特定版本中的...

    hive 操作相关的测试数据集

    9. **Hive与MapReduce**:Hive的本质是将SQL查询转换为MapReduce作业进行执行,因此理解MapReduce的工作原理对于优化Hive查询至关重要。 10. **Hive与Spark集成**:近年来,Hive也支持与Spark的集成,利用Spark的...

    hive-jdbc-1.1.0驱动相关jar包

    Hive JDBC 1.1.0版本是这个驱动的一个特定迭代,提供了对Hive查询、数据操作和管理功能的接口。在本篇中,我们将深入探讨Hive JDBC驱动的相关知识点,以及如何在实际项目中动态加载和使用这些jar包。 首先,理解...

    Ambari下Hive3.0升级到Hive4.0

    这包括停止 Hive 3.0 服务,升级相关组件,然后启动 Hive 4.0 服务。过程中可能会遇到依赖冲突,需要解决后再继续。 7. **测试验证**:升级完成后,进行详尽的功能测试以验证升级成功。这包括查询性能测试、新的 ...

    连接hive依赖的jar包_hive连接方式

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,使得用户可以使用SQL语句来处理存储在Hadoop分布式文件系统(HDFS)上的大数据。...

    连接Hive相关Jar包(DBeaver和JDBC均可使用)

    本篇将详细介绍如何在DBeaver和Java应用中使用JDBC连接Hive,以及涉及到的相关Jar包。 DBeaver是一款跨平台的数据库管理工具,支持多种数据库类型,包括Hive。要连接到Hive,我们需要在DBeaver中配置合适的JDBC驱动...

    hive-exec-2.1.1.jar

    hive-exec-2.1.1 是 Apache Hive 的一部分,特别是与 Hive 的执行引擎相关的组件。Apache Hive 是一个构建在 Hadoop 之上的数据仓库基础设施,它允许用户以 SQL(结构化查询语言)的形式查询和管理大型数据集。Hive ...

    hive sql语句查询

    数据库相关操作 Hive配置单元包含一个名为 default 默认的数据库. create database [if not exists] ;---创建数据库 show databases; --显示所有数据库 drop database if exists <database name> ...

    SpringBoot整合hive-jdbc示例

    Hive-JDBC是Hive提供的一个客户端接口,允许Java应用程序通过JDBC连接到Hive服务器,执行SQL查询并获取结果。它为Hive提供了标准的数据库访问方式,使得开发者能够像操作关系型数据库一样操作Hive。 ### 2. ...

    Hive2.x系列驱动,

    3. hbase-protocol-1.1.1.jar 和 hbase-server-1.1.1.jar:这两个是Apache HBase的相关库,HBase是一个基于Hadoop的分布式数据库,如果Hive与HBase集成,这些库可能用于在Hive查询中直接操作HBase表。 4. hadoop-...

    hive所有jar文件

    Hive-HBase连接器允许用户在Hive中创建外部表,将这些表映射到HBase的数据表,从而可以在Hive的SQL环境中直接对HBase数据进行查询和分析。在实际操作中,用户需要将这些JAR文件放入Hive的lib目录下,这是Hive加载其...

    DBeaver链接hive驱动包下载: hive-jdbc-uber-2.6.5.0-292.jar

    在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,广泛用于数据查询和分析。而DBeaver,作为一款跨平台的数据库管理工具,以其用户友好的界面和强大的功能,深受开发者喜爱。当需要在DBeaver中操作Hive...

    hive 驱动包 hive 链接 datagrip的驱动包

    在大数据处理领域,Hive是一款基于Hadoop的数据仓库工具,它允许用户使用SQL类的语言(称为HQL)来查询、管理、分析存储在Hadoop分布式文件系统中的大规模数据集。而DataGrip是一款由JetBrains公司开发的强大数据库...

    hive性能优化

    1. Hive查询优化实践 - Owen O'Malley作为Hortonworks的创始人兼架构师,长期从事Hive开发工作,与客户密切合作,并有着Hadoop MapReduce与安全性方面的深厚经验。 - 优化Hive查询需要深入理解数据布局、数据格式...

    HIVE从入门到精通.pdf

    #### 五、Hive查询 - **基本查询**:使用SELECT语句进行基本的查询操作,如: ```sql SELECT * FROM pokes WHERE year = 2012; ``` - **复杂查询**:支持多种复杂查询,如JOIN操作、分组聚合等。 #### 六、...

Global site tag (gtag.js) - Google Analytics