Hive - 聚合函数+ 窗口函数

本文介绍了Hive中partition by定义的分组具有累计功能,其在窗口函数计算时具有独立性。还说明了在窗口函数over字句中使用order by的作用,以及创建表和sum() over()的用法,包括不同的累加方式,同时解释了ROWS BETWEEN(WINDOW子句)的含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.partition by 定义的分组,具有累计的功能,会返回每个组中的成员 。
另外partition by字句的优点是:在同一个select语句中,一个窗口函数的计算独立于按其他列分区的其他窗口函数的计算。
当在窗口函数over字句中使用order by 字句时,就指定了两件事:
1、分区中的行如何排序
2、在计算时对哪些行进行累计

1、创建表

create database if not exists cookie;
use cookie;
drop table if exists cookie1;
create table cookie1(cookieid string, createtime string, pv int) row format delimited fields terminated by ',';
load data local inpath "/home/hadoop/cookie1.txt" into table cookie1;
select * from cookie1;

2、sum() over()

select 
   cookieid, 
   createtime, 
   pv, 
   sum(pv) over (partition by cookieid order by createtime rows between unbounded preceding and current row) as pv1, 
   sum(pv) over (partition by cookieid order by createtime) as pv2, 
   sum(pv) over (partition by cookieid) as pv3, 
   sum(pv) over (partition by cookieid order by createtime rows between 3 preceding and current row) as pv4, 
   sum(pv) over (partition by cookieid order by createtime rows between 3 preceding and 1 following) as pv5, 
   sum(pv) over (partition by cookieid order by createtime rows between current row and unbounded following) as pv6 
from cookie1;

说明:
pv1 : 先对cookieid分组,然后按照createTime 的顺序,从开始一直累加到当前行。
pv2: 同pv1.
pv3: 分组内(cookieid)所有的pv 累加,并进行回填。
pv4: 先对cookieid分组,然后按照createTime 的顺序,从当前的前三行一直累加到当前行。
pv5: 先对cookieid分组,然后按照createTime 的顺序,从当前的前三行一直累加到当前后面一行。
pv5: 先对cookieid分组,然后按照createTime 的顺序,从当前行一直累加到最后一行。

如果不指定ROWS BETWEEN,默认为从起点到当前行;
如果不指定ORDER BY,则将分组内所有值累加;
关键是理解ROWS BETWEEN含义,也叫做WINDOW子句:
PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:起点,

UNBOUNDED PRECEDING 表示从前面的起点,

UNBOUNDED FOLLOWING:表示到后面的终点
–其他AVG,MIN,MAX,和SUM用法一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值