更新时间:2026-07-08 GMT+08:00
分享

谓词函数

功能描述

谓词函数用于判断条件是否成立,返回BOOLEAN值。Spark 4.0将常用条件判断函数归类为谓词函数,包括比较运算符、空值判断、模式匹配和逻辑运算等。

函数/操作符列表

函数/操作符

描述

expr1 = expr2

等于。如果expr1等于expr2,返回true。

expr1 == expr2

等于(=的别名)。

expr1 != expr2 / expr1 <> expr2

不等于。

expr1 < expr2

小于。

expr1 <= expr2

小于等于。

expr1 > expr2

大于。

expr1 >= expr2

大于等于。

expr1 <=> expr2

NULL安全等于。非NULL操作数与=相同,但两个NULL返回true,一个NULL返回false。

equal_null(expr1, expr2)

与<=>相同。非NULL操作数与=相同,两个NULL返回true。

expr1 AND expr2

逻辑与。

expr1 OR expr2

逻辑或。

NOT expr / ! expr

逻辑非。

expr1 IN(expr2, expr3, ...)

如果expr等于任一值,返回true。

str LIKE pattern [ESCAPE escape]

模式匹配。_匹配单个字符,%匹配任意字符序列。

str ILIKE pattern [ESCAPE escape]

不区分大小写的模式匹配。

regexp(str, regexp)

如果str匹配正则表达式,返回true。

regexp_like(str, regexp)

如果str匹配正则表达式,返回true。

rlike(str, regexp)

regexp的别名。如果str匹配正则表达式,返回true。

isnan(expr)

如果值为NaN(Not a Number),返回true。

isnull(expr)

如果值为NULL,返回true。

isnotnull(expr)

如果值不为NULL,返回true。

nanvl(expr1, expr2)

如果expr1为NaN,返回expr2;否则返回expr1。

nullif(expr1, expr2)

如果expr1等于expr2,返回NULL;否则返回expr1。

nvl(expr1, expr2)

如果expr1为NULL,返回expr2;否则返回expr1。

nvl2(expr1, expr2, expr3)

如果expr1不为NULL,返回expr2;否则返回expr3。

coalesce(expr1, expr2, ...)

返回第一个非NULL值。

assert_true(expr)

如果expr为true,返回NULL;否则抛出异常。

assert_true(expr, message)

如果expr为true,返回NULL;否则抛出带指定消息的异常。

raise_error(expr)

抛出指定错误消息的异常。

示例

比较运算符

SELECT 1 < 2; 
-- true
 
SELECT 2 <= 2; 
-- true
 
SELECT 2 > 1; 
-- true
 
SELECT 2 >= 1; 
-- true
 
SELECT 1 = '1'; 
-- true
 
SELECT 1 != 2; 
-- true

NULL安全等于(<=> / equal_null)

SELECT NULL <=> NULL; 
-- true
 
SELECT NULL = NULL; 
-- NULL
 
SELECT equal_null(NULL, NULL); 
-- true
 
SELECT equal_null(3, 3); 
-- true

逻辑运算

SELECT true AND false; 
-- false
 
SELECT true OR false; 
-- true
 
SELECT NOT true; 
-- false
 
SELECT ! true; 
-- false

LIKE / ILIKE 模式匹配

SELECT like('Spark', '_park'); 
-- true
 
SELECT ilike('Spark', '_Park'); 
-- true(不区分大小写)

正则表达式匹配

SELECT regexp('%SystemDrive%\\Users\\John', r'%SystemDrive%\\Users.*'); 
-- true
 
SELECT regexp_like('%SystemDrive%\\Users\\John', r'%SystemDrive%\\Users.*'); 
-- true
 
SELECT rlike('%SystemDrive%\\Users\\John', r'%SystemDrive%\\Users.*');
-- true

IN 运算符

SELECT 1 IN(1, 2, 3); 
-- true
 
SELECT 1 IN(2, 3, 4); 
-- false

空值判断

SELECT isnan(cast('NaN' AS DOUBLE)); 
-- true
 
SELECT isnull(NULL); 
-- true
 
SELECT isnotnull(1); 
-- true

nullif / nvl / nvl2 / coalesce

SELECT nullif(1, 1); 
-- NULL
 
SELECT nullif(1, 2); 
-- 1
 
SELECT nvl(NULL, 123); 
-- 123
 
SELECT nvl2(NULL, 'yes', 'no'); 
-- no
 
SELECT nvl2(1, 'yes', 'no'); 
-- yes
 
SELECT coalesce(NULL, NULL, 3, 5); 
-- 3

nanvl

SELECT nanvl(cast('NaN' AS DOUBLE), 123); 
-- 123.0

assert_true / raise_error

SELECT assert_true(1 = 1); 
-- NULL

注意事项

  • 谓词函数在WHERE、HAVING和CASE WHEN等条件表达式中特别有用。
  • isnan仅适用于浮点类型(FLOAT、DOUBLE)。
  • coalesce接受多个参数,返回第一个非NULL值。所有参数类型必须兼容。
  • LIKE区分大小写,ILIKE不区分大小写。
  • regexp、regexp_like、rlike功能相同,均为正则表达式匹配。
  • assert_true和aise_error可用于数据验证场景。

相关文档