first:返回第一个值
速查结论
first(expr[, isIgnoreNull]) 是 Spark SQL 中用于返回一组行中第一个表达式值的聚合函数。
语法
first(expr[, isIgnoreNull])
参数说明
| 参数 | 说明 |
|---|---|
| expr | 任意表达式 |
| isIgnoreNull | 可选,布尔值。当为 true 时,仅返回非空值 |
示例
> SELECT first(col) FROM VALUES (10), (5), (20) AS tab(col);
10
> SELECT first(col) FROM VALUES (NULL), (5), (20) AS tab(col);
NULL
> SELECT first(col, true) FROM VALUES (NULL), (5), (20) AS tab(col);
5
常见报错与避坑指南
- 非确定性函数:该函数是非确定性的,结果取决于行的顺序,在 shuffle 之后可能不确定。如果需要确定性的"第一个值",应在子查询中先排序。
- NULL 值陷阱:若不指定
isIgnoreNull = true,当第一行恰好为 NULL 时,返回值就是 NULL。如果业务需要第一个非空值,务必传入true。 - 与
first_value窗口函数的区别:first()是聚合函数,作用于整个分组;first_value()是窗口函数,需要配合OVER子句使用,语义不同,不可混用。
Since: 2.0.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

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