Hive 窗口分析函数
1.窗口函数
1.LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值
第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)
2.LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值
第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)
3.FIRST_VALUE(col,false) 用于统计窗口内截止到当前行,第一个出现的值
第一个参数为列名,第二个参数是否跳过null值(可选,默认为false)
4.LAST_VALUE(col,false) 用于统计窗口内截止到当前行,最后一个出现的值
第一个参数为列名,第二个参数是否跳过null值(可选,默认为false)
注:实践中多个字段最终取值可以应用到LAST_VALUE,例如
SELECT vid
,LAST_VALUE(a,true) OVER(partition by vid order by `time` ) a
,LAST_VALUE(b,true) OVER(partition by vid order by `time` ) b
,LAST_VALUE(c,true) OVER(partition by vid order by `time` ) c
,LAST_VALUE(d,true) OVER(partition by vid order by `time` ) d
...
5.over子句中的partition by和order by
over(partition by col1[,col2...] )
over(order by by col1[,col2...] )
over(partition by col1[,col2...] order by by col1[,col2...] )
6.over子句中的window子句(clause)
OVER with a window specification. Windows can be defined separately in a WINDOW clause. Window specifications support the following formats:
(ROWS | RANGE) BETWEEN ... PRECEDING AND ... FOLLOWING
(ROWS | RANGE) BETWEEN ... PRECEDING AND ... PRECEDING
(ROWS | RANGE) BETWEEN ... FOLLOWING AND ... FOLLOWING
When ORDER BY is specified with missing WINDOW clause, the WINDOW specification defaults to RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.
When both ORDER BY and WINDOW clauses are missing, the WINDOW specification defaults to ROW BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.
range是逻辑窗口,是指定当前行对应值的范围取值
rows是物理窗口,即根据order by 子句排序后,取的前N行及后N行的数据计算(与当前行的值无关,只与排序后的行号相关)
(UNBOUNDED | [num]) PRECEDING:从分区第一行头开始,则为 unbounded。 N为:相对当前行向前的偏移量
(UNBOUNDED | [num]) FOLLOWING:到该分区结束,则为 unbounded。N为:相对当前行向后的偏移量
CURRENT ROW:当前行,偏移量为0
2.分析函数
1.标准聚合函数
- COUNT
- SUM
- MIN
- MAX
- AVG
2.RANK
排名不连续
3.DENSE_RANK
排名连续,但是有重复,保证同一个值对应同一个排名。
4.ROW_NUMBER
排名连续,无重复,不保证同一个值对应同一个排名。
5.CUME_DIST(累积分布)
小于等于当前值的行数 与 分组内总行数的占比
6.PERCENT_RANK
排名百分比,RANK-1/总行数-1
7.NTILE
离散化分区
函数 | 特点 | 数据 | 结果(升序,桶数=2) |
---|---|---|---|
RANK |
排名不连续 | 2,2,5 | 1,1,3 |
DENSE_RANK |
排名连续,但是有重复 | 2,2,5 | 1,1,2 |
ROW_NUMBER |
排名连续,无重复 |
2,2,5 | 1,2,3 |
CUME_DIST |
占比连续,无重复;小于等于当前值的行数 与 分组内总行数的占比 | 2,2,5 | 0.33,0.66,1.0 |
PERCENT_RANK |
百分比有重复,RANK-1/总行数-1 | 2,2,5 | .0,.0,1.0 |
NTILE(n) |
等量(频)离散化,n是分桶数 | 2,2,2,3 | 1,1,2,2 |
3.应用场景
累积,均值(归一化),分组取topk,累和占比,离散化
4.附录
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics
Hive 窗口分析函数的更多相关文章
- Hive—简单窗口分析函数
hive 窗口分析函数 : jdbc:hive2:> select * from t_access; +----------------+---------------------------- ...
- [Hive_10] Hive 的分析函数
0. 说明 Hive 的分析函数 窗口函数 | 排名函数 | 最大值 | 分层次 | lead && lag 统计活跃用户 | cume_dist 1. 窗口函数(开窗函数) ove ...
- hive窗口函数/分析函数详细剖析
hive窗口函数/分析函数 在sql中有一类函数叫做聚合函数,例如sum().avg().max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的.但是有时 ...
- hive row_number等窗口分析函数
一.排序&去重分析 row_number() over(partititon by col1 order by col2) as rn 结果:1,2,3,4 rank() over(parti ...
- hive中窗口分析函数
分组统计 1. groups sets(field1,field2,field3, (field1,field2)) 样例如下: select dt,tenantCode,nvl(platform,' ...
- hive中分析函数window子句
hive中有些分析函数功能确实很强大,在和sum,max等聚合函数结合起来能实现不少功能. 直接上代码演示吧 原始数据 channel1 2016-11-10 1 channel1 2016-11-1 ...
- Hive之分析函数
目录 一.sum() over(partition by) 二.avg().min().max() over(partition) 三.row_number() over(partition by) ...
- Hive的分析函数的使用
原文: https://www.toutiao.com/i6769120000578945544/?group_id=6769120000578945544 我们先准备数据库.表和数据 开窗分析函数相 ...
- Hive Ntile分析函数学习
NTILE(n) 用于将分组数据按照顺序切分成n片,返回当前记录所在的切片值 NTILE不支持ROWS BETWEEN,比如 NTILE(2) OVER(PARTITION BY cookieid O ...
随机推荐
- C#跟Lua如何超高性能传递数据
前言 在UWA学堂上线那天,我买了招文勇这篇Lua交互的课程,19块还算值,但是前段时间太忙,一直没空研究,他的demo是基于xlua的,今天终于花了大半天时间在tolua下跑起来了,记录一下我的理解 ...
- 个人永久性免费-Excel催化剂功能第82波-复制粘贴按源区域大小自动扩展收缩目标区域
日常工作中,复制粘贴的操作,永远是最高频的操作,没有之一,在最高频的操作上,进行优化,让过程更智能,比一天到晚鼓吹人工智能替换人的骇人听闻的新闻来得更实际.此篇带来一点点的小小的改进,让日后无数的复制 ...
- Excel催化剂开源第2波-自动检测Excel的位数选择对应位数的xll文件安装
Excel插件的部署问题难倒了不了的用户,特别是VSTO的部署,用ExcelDna开发的xll文件部署方便,不挑用户机器环境,是其开发Excel插件的一大优势. 其开发出来的xll文件,最终还是需要考 ...
- SP1026 FAVDICE - Favorite Dice[期望DP]
也许更好的阅读体验 \(\mathcal{Description}\) 一个\(n\)面的骰子,求期望掷几次能使得每一面都被掷到 输入有\(T\)组数据,每次输入一个\(n\) 输出保留两位小数 \( ...
- springboot基础(随笔)
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...
- 2019暑假集训 BLO
题目描述 Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. 输入 输入n<=100000 ...
- C# MATLAB混编(一)
参照这篇博客进行的C# MATLAB混编学习,学习过程中文章中的一些问题我并没有遇到,但是我遇到了一些新问题,这些问题的解决办法将在下一篇博客给出. 配置环境:vs2010(64位)+Matlab20 ...
- Spring Cloud 之 Gateway.
一.Gateway 和 Zuul 的区别 Zuul 基于servlet 2.5 (works with 3.x),使用阻塞API.它不支持任何长期的连接,如websocket. Gateway建立在S ...
- 异常处理 _this.setData is not a function
_this.setData is not a function;at api request success callback function TypeError: _this.setData is ...
- ES6--变量
声明变量 首先我们来回顾一下 es6 之前声明变量的方法:通常情况下,在 JavaScript 中,我们只有一种声明变量的关键字--var,我们使用 var 声明变量,使用 = 给变量赋值.在es6中 ...