first_value:窗口首值
速查结论
first_value(expr[, isIgnoreNull]) 是 Spark SQL 中用于返回窗口帧内第一行的表达式值的窗口函数。
语法
first_value(expr[, isIgnoreNull]) OVER (PARTITION BY expr ORDER BY expr [ASC|DESC])
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| expr | 表达式 | 要获取首个值的列或表达式。 |
| isIgnoreNull | BOOLEAN | 可选。如果设置为 true,则跳过空值,返回第一个非空值。默认值为 false。 |
示例
> SELECT first_value(col) FROM VALUES (10), (5), (20) AS tab(col);
10
> SELECT first_value(col) FROM VALUES (NULL), (5), (20) AS tab(col);
NULL
> SELECT first_value(col, true) FROM VALUES (NULL), (5), (20) AS tab(col);
5
常见报错与避坑指南
- 非确定性:该函数是非确定性的,结果依赖于行的顺序。经过 shuffle 之后行的顺序可能不确定,因此在生产环境中应在
OVER子句中指定ORDER BY以确保结果可复现。 - NULL 值处理:默认情况下
first_value()不会跳过 NULL。如果窗口帧的第一行是 NULL,返回值就是 NULL。使用isIgnoreNull = true可以跳过空值。
Since: 2.0.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
