Spark SQL是否优化两侧lower()?模糊匹配执行逻辑咨询
Spark SQL中
lower(col) like lower(pattern)的执行逻辑与优化说明 - Spark优化器不会把
lower(t1.col) like lower(t2.pattern)识别为专门的不区分大小写匹配逻辑,它会严格按代码定义的步骤执行:先对t1.col和t2.pattern分别做lower()转换,再对转换后的结果执行like匹配。 - Catalyst优化器虽然支持谓词下推、常量折叠等多种逻辑优化,但并没有内置将
lower(a) like lower(b)等价替换为ilike的规则。ilike是Spark原生的不区分大小写匹配算子,你这种写法属于手动模拟等价逻辑,优化器不会把两者归为同一类操作。 - 针对小型的t2表,Spark可能会做广播Join优化,但这只影响表的关联方式,不会改变
lower转换+like匹配的执行顺序。 - 若想简化写法并利用原生优化,建议直接使用
ilike算子,把条件改成t1.id=t2.id and t1.col ilike t2.pattern,执行结果和你当前的写法完全一致。 - 要是想验证执行过程,不用依赖DAG视图,直接执行
EXPLAIN EXTENDED命令就能查看详细的执行计划,清晰看到lower转换和like操作的执行顺序:
EXPLAIN EXTENDED select t1.* from t1 where exists(select * from t2 where t1.id=t2.id and lower(t1.col) like lower(t2.pattern))
内容的提问来源于stack exchange,提问作者Rajat
相关产品推荐
相关产品推荐

