You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark SQL为何对'%''%'与'%' '%'模式返回所有非空行?

为什么Spark SQL中LIKE模式'%''%'或'%' '%'会返回所有非空行?

核心原因:Spark SQL的字符串自动拼接特性

Spark SQL有个容易被忽略的特性:相邻的字符串字面量(中间没有运算符,不管隔多少空格)会自动拼接成一个字符串,这就是你遇到问题的关键。


1. 拆解LIKE '%''%'的实际逻辑

你写的like '%''%',在Spark SQL里会被拆成两个独立的字符串:'%' 和 '%'。因为它们相邻,Spark会直接把二者拼接成'%%'。

而LIKE '%%'和LIKE '%'的效果完全一样:%是通配符,能匹配0个或多个任意字符,所以所有非空字符串都会被命中(NULL值会因为LIKE比较返回NULL,被WHERE子句过滤掉)。这就是第一个查询里a'b和a[c都被返回的原因。

2. 拆解LIKE '%' '%'的实际逻辑

同理,like '%' '%'里的空格会被Spark忽略,两个'%'依然会被自动拼接成'%%',效果等同于LIKE '%',所以所有非空行(包括不包含单引号的gefd)都会被匹配出来。


正确匹配包含单引号的字符串

如果你的真实需求是匹配包含单引号的字符串,需要正确转义单引号,写法如下:

spark.sql('''SELECT * FROM VALUES ('a\'b'), ('a[c'), (NULL) AS tab(col) where col like '%''%' ''').show()

此时只有包含单引号的a'b会被返回,符合预期。

内容的提问来源于stack exchange,提问作者vri vri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:38:40