大数据-Hive开窗函数

本文介绍了Hive的开窗函数,包括排序开窗函数如row_number、rank、dense_rank等,以及聚合开窗函数如ntile、cume_dist。详细阐述了窗口范围控制的rows/range between的使用,探讨了rows和range的区别,并提供了相关业务场景的应用示例。

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

Hive开窗函数结构:
xx() over(partition by xx order by xx ROWS/RANGE between xx and xx)

一、Hive开窗函数,大致有两类:排序开窗、聚合开窗
1. 排序开窗函数
row_number():组内排名后获取行号
rank():组内排名(排名可能不连续)
dense_rank():组内排名(排名连续)
percent_rank():计算给定行的百分比排名,可以用来计算超过了百分之多少的人。(当前行的rank值-1)/(分组内的总行数-1)

first_value()
last_value()

lag(col, n, default):用于统计窗口内往上取第n个值
lead(col, n, default):用于统计窗口内往下取第n个值

cume_dist(col):计算某窗口或分区中截止某值时的累积分布。假定升序排序,则累积分布=小于等于当前值x的行数/分区内的总行数。
ntile():将分区中已排序的行划分为大小尽可能相等的指定数量的排名的组,并返回给指定行所在组的排名。

2. 聚合开窗函数

sum()
count
Hive开窗函数主要分为排序开窗和聚合开窗两类。在排序开窗函数中,常用的函数有row_number()、rank()、dense_rank()和percent_rank()。其中,row_number()用于给每一行分配一个唯一的行号,rank()用于对组内的行进行排名,dense_rank()也是对组内的行进行排名,但排名是连续的,而percent_rank()用于计算给定行的百分比排名,可以用来计算超过了百分之多少的人。\[3\] 在使用Hive开窗函数时,可以通过rows/range between来控制窗口函数的范围。这个功能在满足业务需求时非常有用。通过使用rows/range between,可以根据自己的需求任意地控制窗口函数的范围。\[1\] 需要注意的是,在Hive中,开窗函数的使用是在2003年ISO SQL标准中引入的,它解决了许多用SQL语句难以解决的问题。在开窗函数出现之前,很多问题都需要通过复杂的相关子查询或存储过程来解决。而开窗函数的使用使得这些经典的难题可以轻松地解决。\[2\] #### 引用[.reference_title] - *1* *3* [大数据-Hive开窗函数](https://blog.csdn.net/MsSpark/article/details/122051503)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Hive SQL主要开窗函数用法介绍](https://blog.csdn.net/weixin_43025027/article/details/124388152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值