regexp_like:正则匹配判断
速查结论
regexp_like(str, regexp) 是 Spark SQL 中用于判断字符串是否匹配正则表达式的函数。
语法
regexp_like(str, regexp)
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| str | STRING | 需要判断的源字符串表达式 |
| regexp | STRING | 表示正则表达式的字符串,应为 Java 正则表达式 |
从 Spark 2.0 开始,SQL 解析器不再对字符串文字(包括正则表达式模式)进行转义。例如,要匹配 \abc,regexp 的正则表达式可以是 ^\abc$。
有一个 SQL 配置 spark.sql.parser.escapedStringLiterals,可以用来回退到 Spark 1.6 关于字符串文字解析的行为。
示例
> SET spark.sql.parser.escapedStringLiterals=true;
spark.sql.parser.escapedStringLiterals true
> SELECT regexp_like('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');
true
> SET spark.sql.parser.escapedStringLiterals=false;
spark.sql.parser.escapedStringLiterals false
> SELECT regexp_like('%SystemDrive%\\Users\\John', '%SystemDrive%\\\\Users.*');
true
常见报错与避坑指南
- 转义模式的差异:当
spark.sql.parser.escapedStringLiterals=true时,\\在字符串中表示一个反斜杠;当该配置为 false(默认)时,\\\\才表示一个反斜杠。转义错误会导致匹配失败,请先确认当前配置。 - LIKE vs regexp_like:对于简单的字符串模式匹配,优先使用
LIKE操作符,性能更好且语法更简洁。regexp_like适合需要灵活正则表达式的场景。 - NULL 处理:如果 str 或 regexp 任一参数为 NULL,函数返回 NULL(而非 true 或 false)。在 WHERE 子句中使用时需要注意 NULL 值的过滤逻辑。
Since: 3.2.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

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