Window Functions(窗口函数)

文章目录


原文:Apache Spark SQL --- Window Functions

本分类按照 Spark SQL 官方目录函数顺序整理,共 9 个函数。


1、cume_dist

语法

sql 复制代码
cume_dist()

说明

计算值在窗口分区内相对于其他值的累积分布位置。

示例

sql 复制代码
> SELECT a, b, cume_dist() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
  A1 1 0.6666666666666666
  A1 1 0.6666666666666666
  A1 2 1.0
  A2 3 1.0

引入版本: 2.0.0

官方条目

2、dense_rank

语法

sql 复制代码
dense_rank()

说明

在分区内计算连续排名;相同值名次相同,不会跳号。

示例

sql 复制代码
> SELECT a, b, dense_rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
  A1 1 1
  A1 1 1
  A1 2 2
  A2 3 1

引入版本: 2.0.0

官方条目

3、lag

语法

sql 复制代码
lag(input[, offset[, default]])

说明

返回窗口中当前行之前偏移指定行数的值,越界时返回默认值。

示例

sql 复制代码
> SELECT a, b, lag(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
  A1 1 NULL
  A1 1 1
  A1 2 1
  A2 3 NULL

引入版本: 2.0.0

官方条目

4、lead

语法

sql 复制代码
lead(input[, offset[, default]])

说明

返回窗口中当前行之后偏移指定行数的值,越界时返回默认值。

示例

sql 复制代码
> SELECT a, b, lead(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
  A1 1 1
  A1 1 2
  A1 2 NULL
  A2 3 NULL

引入版本: 2.0.0

官方条目

5、nth_value

语法

sql 复制代码
nth_value(input[, offset])

说明

返回窗口帧内从起点开始第 offset 个值。

示例

sql 复制代码
> SELECT a, b, nth_value(b, 2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
  A1 1 1
  A1 1 1
  A1 2 1
  A2 3 NULL

引入版本: 3.1.0

官方条目

6、ntile

语法

sql 复制代码
ntile(n)

说明

将窗口分区中的行分配到最多 n 个桶中。

示例

sql 复制代码
> SELECT a, b, ntile(2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
  A1 1 1
  A1 1 1
  A1 2 2
  A2 3 1

引入版本: 2.0.0

官方条目

7、percent_rank

语法

sql 复制代码
percent_rank()

说明

计算分区内每个值的百分比排名。

示例

sql 复制代码
> SELECT a, b, percent_rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
  A1 1 0.0
  A1 1 0.0
  A1 2 1.0
  A2 3 0.0

引入版本: 2.0.0

官方条目

8、rank

语法

sql 复制代码
rank()

说明

计算分区内的排名;同分同名次,后续排名可能跳号。

示例

sql 复制代码
> SELECT a, b, rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
  A1 1 1
  A1 1 1
  A1 2 3
  A2 3 1

引入版本: 2.0.0

官方条目

9、row_number

语法

sql 复制代码
row_number()

说明

按照分区内排序为每一行分配从 1 开始的唯一序号。

示例

sql 复制代码
> SELECT a, b, row_number() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
  A1 1 1
  A1 1 2
  A1 2 3
  A2 3 1

引入版本: 2.0.0

官方条目

相关推荐
2601_952047791 小时前
委外入库单同步:旺店通到金蝶云星空的实战配置
大数据·钉钉·制造
阿里云大数据AI技术1 小时前
【云栖实录】一切数据,皆可计算:MaxCompute 升级为AI Native全模态计算服务
大数据·人工智能·agent
珠海西格电力2 小时前
物联网(IoT)在零碳园区中的关键作用:万物互联与数据采集
大数据·人工智能·物联网·安全·系统架构·能源
AI产品测评官2 小时前
2026企业AI招聘选型指南:四类技术路线与硬科技场景适配方案
大数据·人工智能·科技·求职招聘·ai-native
SelectDB技术团队2 小时前
Snowflake 的开源替代怎么选:能力对照、三条部署路径与迁移执行
大数据·数据库·云原生·开源·snowflake·apache doris
Elastic 中国社区官方博客2 小时前
告别繁琐控制台:Kabanos 如何将 MongoDB Compass 的易用性带入 Elasticsearch
大数据·数据库·mongodb·elasticsearch·搜索引擎·全文检索
云上先途2 小时前
GEO智能体和普通搜索Agent有什么区别,专门适配生成式搜索吗?
大数据
凡泰极客科技2 小时前
把 AI 能力接进现有 App,入口、权限和审计怎么设计?
大数据·人工智能
爱吃火鸡面呀2 小时前
Spark RDD 行动算子(Action)详解
windows·ajax·spark