一、嵌套查询统计数量去重问题
描述:如果子查询中对统计的字段已经去重,外面一层就不能同时有distinct(目标统计字段)和group by操作,否则查询结果不是统计的数量而是统计的字段数据。
如:
select
- platform_id, count(distinct user_id) uv_count
from
- (
- select
- platform_id, user_id, sum(pv) pv
- where day = '20140201'
- and (
- platform_id = 12
- or platform_id = 6
- or platform_id = 11
- or platform_id = 14
- )
- and (
- select
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')
-
- select userid,bookid,url
- ) c
- group by c.userid,c.bookid,c.url
- select c.userid,c.bookid,c.url,count(1) pv from(
查询结果:
- 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;
相关推荐
hive思维导图与hive优化的相关建议。纯属个人收集在线资料并个人实践之后整理
4 Hive 表相关语句 3 4.1 Hive 建表: 3 4.1.1使用LIKE关键字创建一个与已有表模式相同的新表: 4 4.2 Hive 修改表 4 4.2.1 Hive 新增一个字段: 4 4.2.2 Hive 修改字段名/字段类型/字段位置/字段注释: 4 4.2.3 ...
数据库相关操作 Hive配置单元包含一个名为 default 默认的数据库. create database [if not exists] ;---创建数据库 show databases; --显示所有数据库 drop database if exists <database name> ...
1)hive的安装请参考网上的相关文章,测试时只在hadoop一个节点上安装hive即可。 2)测试数据data文件'\t'分隔: 1 zhangsan 2 lisi 3 wangwu 3)将测试数据data上传到linux目录下,我放置在:/home/hadoop01/...
hive-exec-2.1.1 是 Apache Hive 的一部分,特别是与 Hive 的执行引擎相关的组件。Apache Hive 是一个构建在 Hadoop 之上的数据仓库基础设施,它允许用户以 SQL(结构化查询语言)的形式查询和管理大型数据集。Hive ...
Hive相关知识; Hive是基于Hadoop的数据仓库工具,可以用来对HDFS中存储的数据进行查询和分析。Hive能够将HDFS上结构化的数据文件映射为数据库表,并提供SQL查询功能,将SQL语句转变成MapReduce任务来执行。Hive通过...
这是我的一份课程作业,需要事先下载搜狗日志文件。有问题,可以问百度。里面也参考了其他博客主的文章,在最后有相关链接。
HiveServer2:使远程客户端可以执行对Hive的查询并返回结果 【备注】 主要针对计算机相关专业的正在做毕设的学生和需要项目实战的大数据可视化、Java学习者。 也可作为课程设计、期末大作业。包含:项目源码、项目...
jdbc2hive特征支持将hive查询中的DB相关条件推送到MySQL 支持仅获取 MySQL 中的必填字段以优化性能支持分场运行多图使用 MySQL 解释估计获取的行现在只支持 MySQL用法建造 $ git clone $ mvn clean -Dmaven.test....
实验目的: 学习Hive基本知识;2)提高Linux操作技能...4)了解Hive架构与相关组件。 实验内容: 1)配置伪分布式Hadoop3系统;2)配置并运行Hive服务HiveServer2;3)以beeline连接HiveServer2,可以运行初级查询命令。
hive分区表生成组件主要是通过获取数据集及数据集item的code,数据集code作为hive表名,数据集item code作为hive分区表字段,同时加入相关字段,形成hive表的基本结构。项目结构─src ├─main │ ├─java │ │ └...
与在多节点 Hadoop 集群上配置数据相关的正在进行的工作相关,我们提供了两个额外的查询,而不是 SSB 的 13 个查询,每个查询由三个具有不同选择性的查询组成。 每个航班都包含一系列构建 OLAP 多维数据集查询,使用...
主要介绍了SqlServer使用 case when 解决多条件模糊查询问题 的相关资料,需要的朋友可以参考下
有关如何配置此功能的更多信息,请参考Hive表格部分。当从另一种编程语言中运行SQL时,结果将作为DataFrame返回。您还可以使用命令行或jdbc/odbc来与SQL接口进行交互。 2. 什么是DataFrame 一个以命名列组织的...
自打Hive出现之后,经过几年的发展,SQLonHadoop相关的系统已经百花齐放,速度越来越快,功能也越来越齐全。本文并不是要去比较所谓“交互式查询哪家强”,而是试图梳理出一个统一的视角,来看看各家系统有哪些技术...
查询的优化 1、由于hive的实时性⽐较差,因此我们可以将数据从hive中同步到hbase,在hbase中提供对外查询的接⼝; 数据分析 1、BI的核⼼部分,即相关业务的分析SQL还是在hive下进⾏的; 2、此处我们可以采⽤spark对...
复制⽂件 hadoop fs -cp ${hdfs file} ${hdfs file} 移动⽂件 hadoop fs -mv ${hdfs file} ${hdfs file} 三、hive和hbase⽐较: Hive(⾮数据库) Hbase(数据库) 适⽤场景 ⽤于对⼀段时间内的数据进⾏分析查询,...
亚马逊食品分析 考虑一下数据集,该数据集包含从1999年到2012年在Amazon上发布的大约600,000种食品评论。该数据集采用CSV格式,每行包含以下字段: ID, ProductId(产品的唯一标识符), UserId(用户的唯一...
主要介绍ChatGPT对以下问题的回答和相关使用ChatGPT的方法: (1)如何使用hadoop进行大数据分析 (2)使用pyspark进行词频统计 (3)如何使用Hive查询大型数据集
hbase+hive(hbase进行删改的数据维护,hive进行复查查询和导入数据);通过hive创建hbase表,在hive中增加数据,hbase同步增加数据,查看hive的数据。 通过hive创建hbase表,在hbase中增加数据,查看hbase数据。