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 窗口分析函数的更多相关文章

  1. Hive—简单窗口分析函数

    hive 窗口分析函数 : jdbc:hive2:> select * from t_access; +----------------+---------------------------- ...

  2. [Hive_10] Hive 的分析函数

    0. 说明 Hive 的分析函数 窗口函数  | 排名函数 | 最大值 | 分层次 | lead && lag 统计活跃用户 | cume_dist 1. 窗口函数(开窗函数) ove ...

  3. hive窗口函数/分析函数详细剖析

    hive窗口函数/分析函数 在sql中有一类函数叫做聚合函数,例如sum().avg().max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的.但是有时 ...

  4. hive row_number等窗口分析函数

    一.排序&去重分析 row_number() over(partititon by col1 order by col2) as rn 结果:1,2,3,4 rank() over(parti ...

  5. hive中窗口分析函数

    分组统计 1. groups sets(field1,field2,field3, (field1,field2)) 样例如下: select dt,tenantCode,nvl(platform,' ...

  6. hive中分析函数window子句

    hive中有些分析函数功能确实很强大,在和sum,max等聚合函数结合起来能实现不少功能. 直接上代码演示吧 原始数据 channel1 2016-11-10 1 channel1 2016-11-1 ...

  7. Hive之分析函数

    目录 一.sum() over(partition by) 二.avg().min().max() over(partition) 三.row_number() over(partition by) ...

  8. Hive的分析函数的使用

    原文: https://www.toutiao.com/i6769120000578945544/?group_id=6769120000578945544 我们先准备数据库.表和数据 开窗分析函数相 ...

  9. Hive Ntile分析函数学习

    NTILE(n) 用于将分组数据按照顺序切分成n片,返回当前记录所在的切片值 NTILE不支持ROWS BETWEEN,比如 NTILE(2) OVER(PARTITION BY cookieid O ...

随机推荐

  1. Spark第一周

    Why Scala 在数据集不是很大的时候,开发人员可以使用python.R.MATLAB等语言在单机上处理数据集.但是在大数据时代,数据集少说都是TB.PB级别,此时便需要分布式地处理.相较于上述语 ...

  2. python菜鸟基础知识(一)

    第三章 基础 3.1程控制语句 3.1.1if语句 1.单if ​ if 关键字 空格 条件 冒号 ​ 缩进 结果 print(1) if 3 > 2: print(9) print(8) 2 ...

  3. golang http json http://www.alexedwards.net/blog/golang-response-snippets

    http://www.alexedwards.net/blog/golang-response-snippets https://gist.github.com/andreagrandi/97263a ...

  4. 程序员到sql笔记

    1最近准备面试,总结一下之前学过到东西.

  5. Python登录豆瓣并爬取影评

    上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化设置(如用户自 ...

  6. 解决tensorflow模型保存时Saver报错:TypeError: TF_SessionRun_wrapper: expected all values in input dict to be ndarray

    TypeError: TF_SessionRun_wrapper: expected all values in input dict to be ndarray 对于下面的实际代码: import ...

  7. 编写Django项目并使用uwsgi和nginx部署在Linux平台

    内容转载自:我自己的博客地址 这是花费了一个月的时间摸索整理出来的一份总结.分享出来一方面是给新人一个借鉴,另一方面对自己也算是个备份. --- *** 整个Django项目: ├── example ...

  8. 【iOS】使用 CocoaPods 导入文件没有提示

    解决方法: 选择工程的 TAEGETS -> Build Settings, 找到 Search Paths 下的 User Header Search Paths选项,如图所示: 点击 “+” ...

  9. Asp.Net MVC SingleServiceResolver类剖析

    SingleServiceResolver一般用于类工厂创建和注入点接口留白.类工厂创建比如Controller控制依赖于此类的创建,注入点留白实质上是依赖注入所对外预留的接口. 以第二个特性为例. ...

  10. 什么是https?http升级为https需要什么?

    一.什么是https? https是一种加密传输协议,网站使用https后可以避免敏感信息被第三方获取.https加密协议=SSL / TLS+http协议,也就是说,在传统的http协议上加上SSL ...