跳到主要内容

filter:过滤数组元素

速查结论

filter(expr, func) 是 Spark SQL 中用于使用谓词条件过滤数组,返回满足条件的元素的函数。

语法

filter(expr, func)

参数说明

参数类型说明
exprARRAY要过滤的输入数组
funcLAMBDA过滤函数,接受元素(以及可选的索引)作为参数,返回布尔值。返回 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真题

交流微信二维码

你可能还想看