`
MauerSu
  • 浏览: 514479 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

HIVE 窗口及分析函数 应用场景

    博客分类:
  • hive
 
阅读更多
源:http://yugouai.iteye.com/blog/1908121
评:
窗口函数应用场景:

(1)用于分区排序

(2)动态Group By

(3)Top N

(4)累计计算

(5)层次查询



一、分析函数

用于等级、百分点、n分片等。

函数 说明
RANK() 返回数据项在分组中的排名,排名相等会在名次中留下空位
DENSE_RANK() 返回数据项在分组中的排名,排名相等会在名次中不会留下空位
NTILE() 返回n分片后的值
ROW_NUMBER() 为每条记录返回一个数字


Rank、DENSE_RANK
RANK()在出现等级相同的元素时预留为空,DENSE_RANK()不会。

Eg:某产品类型有两个并列第一

RANK():第一二为1,第三位3

DENSE_RANK():第一二为1,第三位2

Sql代码  收藏代码
SELECT 
column_name, 
RANK() OVER (ORDER BY column_name DESC) AS rank, 
DENSE_RANK() OVER (ORDER BY SUM(column_name) DESC) AS dense_rank 
FROM table_name 
OVER 需要,括号内为编号顺序



注意:order by 时,desc NULL 值排在首位,ASC时NULL值排在末尾

可以通过NULLS LAST、NULLS FIRST 控制

Java代码  收藏代码
RANK() OVER (ORDER BY column_name DESC NULLS LAST) 
PARTITION BY 分组排列顺序

Java代码  收藏代码
RANK() OVER(PARTITION BY month ORDER BY column_name DESC) 
这样,就会按照month 来分,即所需要排列的信息先以month 的值来分组,在分组中排序,各个分组间不干涉



CUBE,ROLLUP,GROUPING SETS() 详见:HIVE增强的聚合,也可以结合RANK()使用实现具体逻辑。

NTILE
按层次查询,如一年中,统计出工资前1/5之的人员的名单,使用NTILE分析函数,把所有工资分为5份,为1的哪一份就是我们想要的结果:
Sql代码  收藏代码
select empno,ename,sum(sal),ntile(5) over (order by sum(sal) desc nulls last) til from emp group by empno,ename; 
ROW_NUMBER
ROW_NUMBER()从1开始,为每条记录返回一个数字

Sql代码  收藏代码
SELECT 
ROW_NUMBER() OVER (ORDER BY column_name DESC)AS row_name 
FROM table_name; 


二、窗口函数

可以计算一定范围内、一定值域内、或者一段时间内的累积和以及移动平均值等。

可以结合聚集函数SUM() 、AVG() 等使用。

可以结合FIRST_VALUE() 和LAST_VALUE(),返回窗口的第一个和最后一个值

(1)计算累计和

eg:统计1-12月的累积销量,即1月为1月份的值,2月为1.2月份值的和,3月为123月份的和,12月为1-12月份值的和

Java代码  收藏代码
SELECT 
month,SUM(amount) month_amount, 
SUM( SUM(amount)) OVER (ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_amount 
FROM table_name 
GROUP BY month 
ORDER BY month; 
其中:

SUM( SUM(amount)) 内部的SUM(amount)为需要累加的值,在上述可以换为 month_amount

ORDER BY month 按月份对查询读取的记录进行排序,就是窗口范围内的排序

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 定义起点和终点,UNBOUNDED PRECEDING 为起点,表明从第一行开始, CURRENT ROW为默认值,就是这一句等价于:

ROWS UNBOUNDED PRECEDING

PRECEDING:在前 N 行的意思。

FOLLOWING:在后 N 行的意思。



计算前3个月之间的和



Sql代码  收藏代码
SUM( SUM(amount)) OVER (ORDER BY month ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS cumulative_amount 
也可以

Java代码  收藏代码
SUM( SUM(amount)) OVER (ORDER BY month 3 PRECENDING) AS cumulative_amount 
前后一个月之间的和

Sql代码  收藏代码
SUM( SUM(amount)) OVER (ORDER BY month ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS cumulative_amount 
窗体第一条和最后一条的值

Java代码  收藏代码
FIRST_VALUE(SUM(amount)) OVER (ORDER BY month ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS xxxx; 
 
LAST_VALUE(SUM(amount)) OVER (ORDER BY month ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS xxxx; 


三、LAG、LEAD

获得相对于当前记录指定距离的那条记录的数据

LAG()为向前、LEAD()为向后

Sql代码  收藏代码
LAG(column_name1,1) OVER(ORDER BY column_name2) 
 
LEAG(column_name1,1) OVER(ORDER BY column_name2) 
这样就获得前一条、后一条的数据



四、FIRST、LAST

获得一个排序分组中的第一个值和组后一个值。可以与分组函数结合

Java代码  收藏代码
SELECT 
MIN(month) KEEP(DENSE_RANK FIRST ORDER BY SUM(amount)) AS highest_sales_month, 
MIN(month) KEEP(DENSE_RANK LAST ORDER BY SUM(amount)) AS lows_sales_month 
FROM table_name 
GROUP BY month 
ORDER BY month; 
这样就可以求得一年中销量最高和最低的月份。

输出的是月份,但是用SUM(amount)来判断。
分享到:
评论

相关推荐

    hive窗口函数.docx

    Hive 窗口函数是 Hive 中的一种强大的分析函数,它可以对数据进行分类、排序、聚合和排名等操作。下面将详细介绍 Hive 窗口函数的语法结构、分类、应用场景和实践练习。 窗口函数语法结构 窗口函数的基本语法结构...

    03.hive窗口分析函数--应用场景--累积报表--用传统方法实现.mp4

    03.hive窗口分析函数--应用场景--累积报表--用传统方法实现.mp4

    hive窗口函数

    ### Hive窗口函数详解 #### 一、概述 在大数据处理领域,Apache Hive 是一个广泛使用的数据仓库工具,它提供了一种SQL-like的语言——HiveQL,使得用户能够更方便地进行数据汇总、特殊查询和分析。其中,窗口函数...

    Hive SQL大厂必考常用窗口函数及面试题.pdf

    【Hive SQL大厂必考常用窗口函数及面试题】主要涵盖了窗⼝函数在大数据分析中的应用,尤其在OLAP(在线分析处理)场景中的重要性。窗⼝函数是一种标准SQL功能,它允许对数据库数据进行实时分析处理,如市场分析、...

    大数据hive中窗口函数的一些常用函数

    窗口函数的应用场景非常广泛,例如计算累计销售额、排名、移动平均值等。 在使用窗口函数时,需要注意以下几点: * partition by子句用于指定分组的列名,必须在窗口函数中指定。 * order by子句用于指定排序的...

    hive函数大全.doc

    在Hive中,函数是数据分析和处理的重要工具,它们提供了丰富的功能来操作和转化数据。以下是对"hive函数大全.doc"文档中提到的部分知识点的详细解释: ### 一、关系运算: 1. **等值比较**(=):用于判断两个...

    Hive常用函数

    - **分析函数 (Analytics functions)**:例如 `RANK`, `ROW_NUMBER`, `DENSE_RANK`, `CUME_DIST`, `PERCENT_RANK`, `NTILE` 等,这些函数用于对数据进行排序和分组。 - **混合函数**:如 `java_method`, `reflect`...

    hive常用函数参数手册

    本文档旨在介绍Hive中的常用函数及其用法,帮助用户更好地理解和应用这些函数。需要注意的是,由于Hive的不同版本可能存在差异,因此本手册仅供学习和参考之用,具体使用时应以官方文档为准...

    【63课时完整版】大数据实践HIVE详解及实战

    20.Hive中分析函数与窗口函数 21.Hive中UDF的介绍 22.Hive中使用自定义UDF实现日期格式转换 23. HiveServer2的介绍及三种连接方式 24.Hive元数据、fetch task和严格模式的介绍 第3章:Sqoop Sqoop及用户行为分析...

    《企业级Hive实战课程》大纲

    - Hive应用场景及优缺点分析; - 环境搭建过程; - 元数据与数据存储机制。 2. **Hive Shell常用命令** - `hive-e`、`hive-f`、`hive-v`、`hive-i`、`hive-S`等命令的使用方法及其应用场景。 3. **Hive表操作*...

    hive函数大全.7z

    4. **Hive案例说明**:每个函数通常会配以实际案例,帮助理解函数的使用场景和效果,增强实用性。 5. **高级特性**:可能会涉及UDF(用户定义函数)、UDAF(用户定义聚合函数)和UDTF(用户定义表生成函数)的开发...

    hive常用函数参考手册.docx

    4. **特殊函数**:包括窗口函数(window functions)、分析函数(analytic functions)等。 #### 二、HIVE CLI命令 Hive提供了CLI(Command Line Interface)来执行SQL语句和管理数据库。以下是一些常用的CLI命令: 1....

    hive综合应用案例 - 用户搜索日志分析.zip

    【标题】:“Hive综合...通过这个案例,学习者不仅可以掌握Hive的基本操作,还能了解到如何在实际业务场景中运用Hive解决大数据分析问题。这不仅有助于提升数据处理能力,也有助于理解大数据驱动决策的重要性和流程。

    Hive大数据仓库-笔记整理 (一)2020年最新版.pdf

    Hive还提供了自定义函数(UDF, User Defined Functions)和窗口函数,扩展了查询功能。 6. **Hive性能优化**:Hive可以通过多种方式优化查询性能,比如使用分区过滤减少数据扫描量,使用物化视图预计算常用查询,...

    快速学习-Hive函数

    自定义函数在Hive中的应用,极大提升了Hive处理复杂数据逻辑的能力,使得Hive可以应对更多业务场景的需求。 **总结** Hive函数的学习是理解和运用Hive的关键部分。熟练掌握内置函数的使用,并学会创建自定义函数,...

    apache-hive文档

    HQL还提供了窗口函数和自定义函数(UDFs)以增强其功能。 在Hive中,数据处理分为两个阶段:编译和执行。编译阶段,HQL语句被转换为一系列的MapReduce任务;执行阶段,这些任务在Hadoop集群上并行运行。Hive的优化...

    Hive资料整合

    Hive最初由Facebook开发,旨在解决大规模结构化数据集的分析问题,现在广泛应用于互联网、电信、金融等行业的数据仓库和大数据分析场景。 HQL(Hive Query Language)是Hive的核心,它是一种声明式的数据处理语言,...

    Hive编程指南+HIVE从入门到精通+Hive高级编程+Apache Oozie

    1. **窗口函数**: 使用Lag、Lead、Rank、RowNumber等函数进行时间序列分析和排名。 2. **多层嵌套查询与子查询**: 处理复杂的数据关系,如递归查询、集合操作和自关联查询。 3. **Joins优化**: 理解不同类型的JOIN...

    基于Hadoop的数据仓库Hive学习指南.doc

    通过HiveQL,用户可以执行复杂的分析任务,如JOIN、窗口函数和自定义函数。 总结,Hive是Hadoop生态系统中的一个重要组成部分,它为数据分析师提供了便捷的SQL接口,简化了大数据处理的复杂性,特别适用于需要对...

Global site tag (gtag.js) - Google Analytics