跳到主要内容

forall:全称量词判断

速查结论

forall(expr, pred) 是 Spark SQL 中用于判断数组中是否所有元素都满足给定条件的函数。

语法

forall(expr, pred)

参数说明

参数类型说明
exprARRAY要测试的输入数组
predLAMBDA谓词函数,接受一个数组元素作为参数,返回布尔值

返回值

  • 如果数组中所有元素都满足谓词条件,返回 true。
  • 如果存在至少一个元素不满足条件,返回 false。
  • 如果所有满足条件的元素都返回 true,但存在某个元素使谓词返回 null(通常因为 null 元素),则返回 null。

示例

> SELECT forall(array(1, 2, 3), x -> x % 2 == 0);
false
> SELECT forall(array(2, 4, 8), x -> x % 2 == 0);
true
> SELECT forall(array(1, null, 3), x -> x % 2 == 0);
false
> SELECT forall(array(2, null, 8), x -> x % 2 == 0);
NULL

常见报错与避坑指南

  • null 元素导致返回 null:当数组包含 null 元素,且其他元素都满足条件时,函数返回 null。这是因为三值逻辑中 true AND null = null。如果需要确定性的布尔结果,使用 COALESCE(forall(...), false) 将 null 转为 false。
  • 与 exists 的对比forall 是全称量词(所有元素都满足),exists 是存在量词(至少一个元素满足)。两者对 null 的处理逻辑遵循三值逻辑语义。
  • 空数组返回 true:对于空数组,forall 返回 true(空真,vacuous truth),这与数学上的全称量词语义一致。

Since: 3.0.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

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

交流微信二维码

你可能还想看