filter:过滤数组元素
速查结论
filter(expr, func) 是 Spark SQL 中用于使用谓词条件过滤数组,返回满足条件的元素的函数。
语法
filter(expr, func)
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| expr | ARRAY | 要过滤的输入数组 |
| func | LAMBDA | 过滤函数,接受元素(以及可选的索引)作为参数,返回布尔值。返回 true 的元素被保留。自 3.0.0 起,内部函数可以使用索引参数 (x, i) -> ... |
返回值
返回一个新数组,包含输入数组中所有使 func 返回 true 的元素。
示例
> SELECT filter(array(1, 2, 3), x -> x % 2 == 1);
[1,3]
> SELECT filter(array(0, 2, 3), (x, i) -> x > i);
[2,3]
> SELECT filter(array(0, null, 2, 3, null), x -> x IS NOT NULL);
[0,2,3]
常见报错与避坑指南
- null 元素过滤:如果谓词对 null 元素返回 null(而非 false),该元素不会被保留。如需显式过滤 null,请使用
x IS NOT NULL作为条件。 - 索引参数从 0 开始:自 3.0.0 版本起支持的索引参数
i从 0 开始计数。注意(x, i) -> x > i中 i 是 0-based 索引。 - 与 WHERE 子句区分:此函数是数组函数,作用于数组列;不要与 SQL 中的
WHERE子句混淆。对于列级过滤使用WHERE,对于数组内部元素过滤使用filter()。
Since: 2.4.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

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