当前位置: 首页 > news >正文

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

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

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

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

一般起手都是

where QD like '%线上化%‘

学习了其他的写法:

1.INSTR函数

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

INSTR函数的介绍:

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

2.正则表达式匹配

where QD REGEXP "线上化"

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

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 操作符。

相关文章:

  • uniapp + Axios + 小程序封装网络请求
  • 力扣HOT100之子串:76. 最小覆盖子串
  • mock.js模拟数据
  • 在linux部署网站
  • Rust vs. Go: 在仅使用标准库时的性能测试
  • 数据库基础知识点(系列七)
  • element-plus 的简单应用
  • Python----计算机视觉处理(Opencv:图像边缘检测:非极大值抑制,双阈值筛选)
  • Vue基本使用
  • qt+opengl 加载三维obj文件
  • 23.linux下电脑健康检查
  • 【NLP 47、实践 ⑫ 通过mask和loss计算实现SFT】
  • TensorRT怎么实现加速的
  • 001初识多视图几何
  • 虚拟机(一):Java 篇
  • 与Aspose.pdf类似的jar库分享
  • C++三大特性之继承
  • 数字化转型的点线面体:从局部突破到生态构建
  • 2181、合并零之间的节点
  • GD32 ISP下载程序(串口烧录)
  • 涉个人信息收集使用问题,15款App和16款SDK被通报
  • “五一”假期文旅热度创近3年新高,入境游订单飙升130%
  • 最会说亚军感言的鲁德,站上了马德里公开赛的冠军领奖台
  • 韩国国民力量党宣布金文洙为该党总统候选人
  • 五一假期上海多个景点人流如织,警方多措并举确保秩序
  • 云南省政协原党组成员、秘书长车志敏接受审查调查