工作中遇到的spark SQL小问题:包含某个或某些字符的条件

server/2025/3/31 5:13:28/

今天又来总结工作中遇到的问题了,今天是SQL,spark引擎

需求描述,筛选渠道包含”线上化“的数据

也就是讨论where里面的这个筛选条件怎么写

一般起手都是

sql">where QD like '%线上化%‘

学习了其他的写法:

1.INSTR函数

sql">where INSTR(QD,"线上化") <> 0

INSTR函数的介绍:

INSTR 函数通常用于查找一个子字符串在另一个字符串中首次出现的位置。如果找到子字符串,函数会返回其首次出现的位置(位置从 1 开始计数);如果未找到,函数会返回 0。

2.正则表达式匹配

sql">where QD REGEXP "线上化"

好处在于,如果我的应用场景是包含多个字符串其中一个的

sql">WHERE QD REGEXP '金融科技部|投资银行部|人力资源部'

| 表示或关系,意味着只要 QD 列中的字符串包含 “金融科技部”、“投资银行部” 或者 “人力资源部” 中的任意一个,就会被筛选出来。

正则表达式的匹配操作通常会比普通的字符串比较操作更耗费资源,所以在处理大量数据时,可能会对性能产生一定影响。

三者的比较,参考豆包的回复

功能

  • WHERE QD LIKE '%线上化%'LIKE 是 SQL 中用于字符串模糊匹配的操作符。% 是通配符,表示任意数量(包括零个)的任意字符。因此,'%线上化%' 表示匹配包含 “线上化” 的任意字符串。它只能处理简单的通配符匹配,无法进行复杂的模式匹配。
  • WHERE INSTR(QD, "线上化") <> 0INSTR 是一个函数,用于返回子字符串在字符串中第一次出现的位置。如果 QD 列包含 “线上化”,则 INSTR(QD, "线上化") 的返回值大于 0;如果不包含,则返回 0。因此,INSTR(QD, "线上化") <> 0 表示 QD 列包含 “线上化”。
  • WHERE QD REGEXP "线上化"REGEXP 是 SQL 中的正则表达式匹配操作符,用于按照正则表达式模式来匹配字符串。“线上化” 是一个简单的正则表达式模式,表示匹配包含 “线上化” 的字符串。正则表达式可以进行更复杂的模式匹配,如字符类、量词、分组等。

性能

  • WHERE QD LIKE '%线上化%':由于 LIKE 操作符使用了通配符 % 在开头,数据库无法使用索引进行快速查找,因此性能通常较差,尤其是在处理大量数据时。
  • WHERE INSTR(QD, "线上化") <> 0INSTR 函数同样无法利用索引进行优化,需要对每一行数据进行全字符串扫描,因此性能也较差。
  • WHERE QD REGEXP "线上化":正则表达式匹配通常比 LIKE 和 INSTR 更复杂,需要更多的计算资源,因此性能可能是三者中最差的。

总结

  • 如果只需要进行简单的模糊匹配,建议使用 LIKE 操作符,因为它的语法简单,性能相对较好。
  • 如果对性能要求不高,且需要使用函数进行更灵活的处理,可以使用 INSTR 函数。
  • 如果需要进行复杂的模式匹配,如匹配特定格式的字符串、进行字符类匹配等,则应使用 REGEXP 操作符。
文章来源:https://blog.csdn.net/weixin_58587245/article/details/146542713
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/server/179541.html

相关文章

《大语言模型》学习笔记(四)--Transformer 模型

1.Transformer架构 当前主流的大语言模型都基于Transformer模型进行设计的。Transformer是由多层的多头自注意力&#xff08;Multi-headSelf-attention&#xff09;模块堆叠而成的神经网络模型。2017 年&#xff0c;Google 在论文 Attentions is All you need&#xff08;论文…

5.go切片和map

切片的概念 数组和切片相比较切片的长度是不固定的&#xff0c;可以追加元素&#xff0c;在追加时可能会使切片的容量增大&#xff0c;所以可以将切片理解成 "动态数组"&#xff0c;但是&#xff0c;它不是数组&#xff0c;而是构建在数组基础上的更高级的数据结构。…

C++20 中的std::c8rtomb和 std::mbrtoc8

文章目录 1. 引言2. std::c8rtomb 函数详解3. std::mbrtoc8 函数详解4. 使用示例5. 注意事项6. 总结 1. 引言 C20 标准引入了对 UTF-8 编码的更好支持&#xff0c;其中包括两个重要的函数&#xff1a;std::c8rtomb 和 std::mbrtoc8。这两个函数分别用于将 UTF-8 编码的字符转换…

深入理解垃圾收集算法:从分代理论到经典回收策略

垃圾收集&#xff08;Garbage Collection, GC&#xff09;是现代虚拟机自动内存管理的核心机制。它不仅能自动回收不再使用的对象&#xff0c;还能极大减轻开发者在内存管理上的负担。本文将详细讲解垃圾收集算法的基本思想、分代收集理论以及几种经典的垃圾收集算法。 注&…

Ceph集群2025(Squid版)导出高可用NFS集群(上集)

#创建一个CephFS 文件系统 ceph fs volume create cephfs02#创建子卷 ceph fs subvolumegroup create cephfs02 myfsg2#查看子卷 ceph fs subvolumegroup ls cephfs02[{"name": "myfsg2"} ]创建 NFS Ganesha 集群 #例子 $ ceph nfs cluster create <c…

【BFS染色问题】P1162填涂颜色例题+核心逻辑

文章目录 【算法思路】【代码示例】 BFS处理染色问题的核心逻辑 【算法思路】 要判断一个数字 0 是否在闭合圈内&#xff0c;可以换个角度思考。不在闭合圈内的 0 是可以从方阵的边界出发&#xff0c;通过上下左右移动&#xff0c;只经过其他 0 到达的。 思路①.我们可以从方…

用Deepseek写扫雷uniapp小游戏

扫雷作为Windows系统自带的经典小游戏&#xff0c;承载了许多人的童年回忆。本文将详细介绍如何使用Uniapp框架从零开始实现一个完整的扫雷游戏&#xff0c;包含核心算法、交互设计和状态管理。无论你是Uniapp初学者还是有一定经验的开发者&#xff0c;都能从本文中获得启发。 …

[思路提供]Mysql主从复制时的网络延迟很高,如何调整MySQL复制参数

在 MySQL 主从复制过程中&#xff0c;如果网络延迟很高&#xff0c;可以通过调整以下复制参数来优化数据同步&#xff1a; 增加复制并行度&#xff1a; slave_parallel_workers&#xff1a;从 MySQL 5.6 开始支持多线程复制&#xff0c;可将该值设置为大于 0 的值&#xff0c;根…