`
student_lp
  • 浏览: 437260 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

常见的hive查询操作有:count、group by、order by、join、distribute by、sort by、clusrer by、union all

一、常见的聚合函数

1、count计数

  • count(*) 所有值不全为NULL时,加1操作;
  • count(1) 不管有没有值,只要有这条记录,值就加1
  • count(col) col列里面的值为null,值不会加1,这个列里面的值不为NULL,才加1 

2、sum求和

    sum(可转成数字的值)  返回bigint

3、avg求平均值

    avg(可转成数字的值)   返回double

4、distinct不同值个数

    count(distinct col)

二、order by按照某些字段排序

样例:select col1,other... from table where conditio order by col1,col2 [asc|desc]

注意:order by 后面可以有多列进行排序,默认按字典排序

order by为全局排序

order by需要reduce操作,且只有一个reduce,与配置无关。数据量很大时,慎用。

执行流程:


 从表中读取数据,执行where条件,以col1,col2列的值做成组合key,其他列值为value,然后在把数据传到同一个reduce中,根据需要的排序方式进行。

三、group by按照某些字段的值进行分组,有相同值放到一起。

    样例:

select col1[,col2],count(1),sel_expr(聚合操作) from table
where condition        --->Map端执行
group by col1[,col2]   --->Reduce端执行
[having]               --->Reduce端执行

    注意:

  • select后面非聚合列,必须出现在group by中
  • select后面除了普通列就是一些聚合操作
  • group by后面也可以跟表达式,比如substr(col)

   特性

  • 使用了Reduce操作,受限于reduce数量,设置reduce参数mapred,reduce,tasks
  • 输出文件个数与reduce数相同,文件大小与reduce处理的数据量有关

   问题

  • 网络负载过重
  • 数据倾斜,优化参数hive.groupby.skewindata为true,会启动一个优化程序,避免数据倾斜。

四、join表连接

    两个表m,n之间按照on条件连接,m中的一条记录和n中的一条记录组成一条新记录。

    join等值连接(内连接),只有某个值在m和n中同时存在时。

    left outer join左外连接,左边表中的值无论是否在b中存在时,都输出:右边表中的值,只有在左边表中存在时才输出。

    right outer join和left outer join相反。

    left semi join类似exists。即查找a表中的数据,是否在b表中存在,找出存在的数据。

    mapjoin:在map端完成join操作,不需要用reduce,基于内存做join,属于优化操作。

五、Mapjoin

    在map端把小表加载到内存中,然后读取大表和内存中的小表完成连接操作。其中使用了分布式缓存技术。

    有点:不消耗集群的reduce资源;减少了reduce操作,加快程序执行;降低网络负载。

    缺点:占用部分内存,所以加载到内存中的表不能过大,因为每个计算节点都会加载一次;生成较多的小文件。

    执行方式:

  • 自动方式,配置以下参数:hive自动根据sql,选择使用common join或者map join【set hive.auto.convert.join=true;hive.mapjoin.smalltable.filesize=25mb】
  • 手动指定:select /*+mapjoin(n)*/ m.col,m.col2,n.col3 from m join n on m.col=n.col。注意/*+mapjoin(n)*/不能省略,只需替换表名n值即可。

    mapjoin的使用场景:

  • 关联操作中有一张表非常小
  • 不等值的连接操作

六、hive分桶JOIN

    对于每一个表或者分区,hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。

    hive是针对某一列进行分桶。hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶中。

    好处:获得更高的查询处理效率;使取样更高效。

create table bucketed_user(
   id  int,
   name  string
)clustered by (id) sorted by (name) into 4 buckets row format delimited fields terminated by '\t' stored as textfile;

set hive.enforce.bucketing=true;
分桶的使用
select * from bucketed_user tablesample(bucket 1 out of 2 on id)

BUCKET JOIN

set hive.optimize.bucketmapjoin=true;
set hive.optimize.bucketmapjoin.sortedmerge=true;
set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;

   连接两个在(包含连接列)相同列上划分了桶的表,可以使用Map端连接高效的实现。比如join操作。

   对于join操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那个将保存相同列值的痛进行join操作就可以,可以大大减少join的数据量。

    对于map端连接的情况,两个表以相同方式划分桶。处理左边表内某个桶的mpper知道右边表内相匹配的行在对应的桶内。因此,mapper只需要获取那个桶即可进行连接。这一优化方法并不一定要求表必须桶的个数相同,两个表的桶个数是倍数关系也可以。

七、distribute by、sort by

   distribute分散数据。distribute by col----按照col列把数据散列到不同的reduce。

   sort by排序,sort by col----按照col列把数据排序。

  •  distribute by与group by对比。都是按照key值划分数据,都是用reduce操作,唯一不同的是distribute by只是单纯的分散数据,而group by把相同key的数据聚集到一起,后续必须是聚合操作。
  • order by与sort by对比:order by是全局排序;sort by只是确保每个reduce上面输出的数据有序。如果只有一个reduce时,和order by作用一样。

八、cluster by

    把有相同值的数据聚集到一起,并排序。效果等价于distribute by col sort by col。cluster by col<==>distribute by col sort by col。

  • 大小: 28.7 KB
分享到:
评论

相关推荐

    HIVE安装及详解

    * 数据处理:HIVE使用MapReduce处理数据,而传统数据库使用SQL查询 * 扩展性:HIVE具有高可扩展性,可以处理大规模数据,而传统数据库的扩展性较差 HIVE数据存储 HIVE数据存储主要使用Hadoop分布式文件系统(HDFS...

    Hive数据查询详解.md

    Hive数据查询详解,基础篇

    hive入门级详解

    Hive 入门级详解 Hive 是一个基于 Hadoop 的数据仓库系统,它提供了一个类似于关系型数据库的查询语言 HQL,并且可以将查询转换为 MapReduce 任务来执行。Hive 的存储结构主要包括三个层面:数据存储层、计算资源层...

    Hive中SQL详解

    Hive中SQL详解 Hive是一个基于Hadoop构建的数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据。 Hive SQL支持绝大多数的语句,如DDL、DML、聚合函数、连接查询、条件查询等。 ...

    hive参数配置说明大全

    Hive是一款基于Hadoop的数据仓库工具,用于数据的存储、查询和分析。在Hive中,参数配置起着非常重要的作用,它可以影响Hive的性能、安全性和执行效率。本文将对Hive的参数配置进行详细的解释,以便更好地使用Hive。...

    Hive基础,详解介绍HIVESQL中的语法

    Hive基础,详解介绍HIVESQL中的语法

    Hive视频教程详解及实战.rar

    Hive视频教程详解及实战视频教程,课程由浅入深,介绍了Hive基本架构及环境部署,带领大家认识数据仓库Hive的优势及Hive具体使用。并通过企业实际需求分析,讲解HiveQL中的DDL和DML的使用,以及常见的性能优化方案。

    Hive的案例详解.pdf

    ### Hive的案例详解 #### 一、Hive概述 Hive是基于Hadoop的一个数据仓库工具,主要用于数据的提取、转换、加载(ETL),它能够将结构化的数据文件映射为数据库表,并提供SQL查询功能,从而将SQL语句转化为...

    龙战于野大数据MR原理启动hive查询表分区.docx

    Hive查询表分区的MR原理启动详解 Hive是一款基于Hadoop的数据仓库工具,主要用于处理结构化和半结构化的数据。MR(MapReduce)是Hadoop中的一种编程模型,用于处理大规模数据。在Hive中,MR原理启动是指使用...

    hive查询优化

    ### Hive查询优化详解 #### 一、Hive基础与架构 **Hive**作为Hadoop生态中的重要组成部分,被广泛应用于大数据分析领域。它通过提供类SQL语言(HiveQL)来简化对Hadoop分布式文件系统(HDFS)中存储的大规模数据集...

    hive sql详解 经典

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(称为HiveQL)查询存储在Hadoop分布式文件系统(HDFS)中的大型数据集。这篇博客深入探讨了Hive SQL的使用,帮助用户理解和掌握其核心概念...

    Hive_QL详解1

    Hive 是一种基于 Hadoop 的数据仓库工具,它允许用户使用 SQL-like 查询语言(Hive QL)对大规模数据集进行分析和处理。本篇文章将详细探讨Hive的几个关键方面,包括Hadoop计算框架的特性、优化策略以及Hive在数据...

    Hive metastore 使用达梦数据库存储元数据

    《Hive metastore 使用达梦数据库存储元数据详解》 在大数据处理领域,Hive作为一个分布式数据仓库工具,被广泛用于存储和管理大规模结构化数据。Hive的元数据是其核心组成部分,它包含了表、分区、列等信息,使得...

    Hive技术平台详解.pptx

    它通过使用类似于 SQL 的查询语言,即 HiveQL(Hive Query Language),使得没有 Java 开发经验的用户也能便捷地处理海量数据。Hive 的数据存储在 HDFS(Hadoop Distributed File System)上,而其查询语句则被转换...

    Ubuntu 完全分布式及hive远程安装详解

    在大数据处理领域,Apache Hive是一个广泛使用的数据仓库工具,它允许用户使用SQL(HQL)查询Hadoop集群中的数据。本篇将详细介绍如何在Ubuntu操作系统上进行Hive的完全分布式安装,并实现远程访问。首先,我们需要...

    Hive技术平台详解.pdf

    与传统的RDBMS相比,Hive的查询语言是HQL,而RDBMS使用SQL。数据存储方面,Hive使用HDFS,而RDBMS通常使用本地文件系统。在数据格式判断和处理上,Hive在查询时进行判断,而RDBMS在插入时判断。Hive的执行延迟相对较...

    Hive SQL 编译过程详解

    它允许用户使用SQL-like语言(HiveQL)对分布式存储的数据进行查询和分析。本文将深入探讨Hive SQL如何被编译成MapReduce任务,以及在这个过程中涉及到的关键原理。 1. MapReduce实现基本SQL操作的原理: - **...

    HIVE函数详解大全

    在大数据处理领域,Hive 是一个非常重要的工具,它提供了SQL-like的语言来进行数据查询和分析。本篇文章将详细解析Hive中的各种函数,帮助你更好地理解和应用这些功能。 一、关系运算 关系运算用于比较两个或多个...

    hive数据加载导出查询

    ### Hive 数据加载与导出详解 #### 创建 Hive 表 在使用 Hive 进行数据分析之前,首先需要创建一张表来存储数据。以下是一段创建分区表的 SQL 语句示例: ```sql CREATE TABLE db_0309.emp ( empno INT, ename ...

    Hive语法详解

    ### Hive SQL语法详解 #### 一、Hive简介与特性 Hive是一个建立在Hadoop之上的数据仓库工具,主要用于对存储在Hadoop文件系统(HDFS)中的数据进行数据分析和处理。它提供了类似SQL的查询语言——Hive SQL,使得...

Global site tag (gtag.js) - Google Analytics