Hive窗口函数
创始人
2024-05-26 17:36:49
0

概述

        窗口函数(window functions)也叫开窗函数、OLAP函数。

  •         如果函数具有over子句,则它是窗口函数
  •         窗口函数可以简单地解释为类似于聚合函数的计算函数,但是通过group by 子句组合的          常规聚合会隐藏正在聚合的各个行,最终输出一行,窗口函数聚合后还可以访问当中的            各个行,并且可以将这些行中的某些属性添加到结果集中

实例

数据

cookie1,2021-05-10,1
cookie1,2021-05-11,5
cookie1,2021-05-12,7
cookie1,2021-05-13,3
cookie1,2021-05-14,2
cookie1,2021-05-15,4
cookie1,2021-05-16,4
cookie2,2021-05-10,2
cookie2,2021-05-11,3
cookie2,2021-05-12,5
cookie2,2021-05-13,6
cookie2,2021-05-14,3
cookie2,2021-05-15,9
cookie2,2021-05-16,7

建表语句 

create table if not exists website_pv
(cookieid   string,createtime string,pv         int
)row format delimited fields terminated by ',';

 --插入数据

load data inpath '/website_pv.txt' into table website_pv;

 sum+group by 常规聚合操作

sum+窗口函数聚合操作 

窗口表达式 

在 sum(pv) over (partition by cookieid order by createtime) 语法完整的情况下,进行累积聚合操作,默认累积聚合行为是:从第一行聚合到当前行

 window expression 窗口表达式给我们提供了一种控制行范围的能力,比如向前2行,向后3行,语法如下:

关键字是 rows between... and ... ,包括下面这几个选项

  •  PRECEDING:往前 
  •  FOLLOWING:往后 
  •  CURRENT ROW:当前行 
  •  UNBOUNDED:起点
  • UNBOUNDED PRECEDING 表示从前面的起点
  • UNBOUNDED FOLLOWING:表示到后面的终点

 窗口排序函数 

row_number()、rank()、dense_rank()

适用场景: 适合topN业务分析

row_number():在每个分组中,为每行分配一个从1开始的唯一序列号,递增,不考虑重复;
rank():在每个分组中,为每行分配一个从1开始的序列号,考虑重复,挤占后续位置;
dense_rank():在每个分组中,为每行分配一个从1开始的序列号,考虑重复,不挤占后续位置;

 需求:找出每个用户访问pv最多的Top3重复并列的不考虑

 ntile()

将每个分组内的数据分为指定的若干个桶里(分为若干个部分),并且为每一个桶分配一个桶编号

如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1

 窗口分析函数

lag(col,n,default):用于统计窗口内往上第n行值

        第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为null时,取默认值,如果不指定,则为null)

lead(col,n,default):用于统计窗口内往下第n行值

        第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为null时,取默认值,如果不指定,则为null)

first_value:取分组内排序后,截止到当前行,第一个值

last_value:取分组内排序后,截止到当前行,最后一个值

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...