点击上方蓝色【数据攻略】关注+星标~
第一时间获取最新内容
哈喽大家好,我是六哥~
继上篇分享 『工具&语言』 板块
也有一段日子了,上篇hive分享可戳
👉讲懂高频Hive:窗口函数(一)
日常工作中难免会碰到些
字符清洗、匹配类的需求
一提到正则相关处理就头大
规则多,细节多,一不注意就用错...
所以本篇,就顺带一起来理理工作中运用频率较高的函数:
—— 字符处理函数
总结下使用场景是啥?
常用到的函数有哪些?
长得很像的函数间有啥区别?
内含 使用注意事项+实例
(注:坑点较多,可收藏慢看)
------正文手动分割线------
本文结构速览:
一、常用情景总结
二、字符串函数盘点
三、高频函数精讲
concat&concat_ws
like&rlike\regexp家族
常用场景
01
实际业务场景中,经常碰到如下分析需求:
比如:
想分析某批用户的行为旅程路径
想根据用户搜索的内容,提取有效关键词做意向分析
想找到某些博主的相似关注粉丝做用户画像分析
....
上述情况,一般可能需要用到字符串函数
来进行前序的数据清洗和处理工作
总结下来,使用场景不外乎有以下3类:
新增场景:如做字符拼接,eg.concat()删除场景:如做字符串截取,eg.substr()
替换场景:如按格式做字符串转换,eg.regexp正则相关
常用字符串函数
02
日常数据分析工作中常用到的字符串函数大体有这些:
高频函数精讲
03
接着,讲讲常用的几个易错函数
▌concat&concat_ws:▼ 语法:concat(string A, string B…)## 返回值: string## 说明:返回输入字符串连接后的结果,支持任意个输入字符串concat_ws(string SEP, string A, string B…)## 返回值: string## 说明:返回输入字符串连接后的结果,SEP表示各个字符串间的指定分隔符
▼ 注意点:
相同点:concat_ws()和concat()功能类似,都是将字符串拼接起来
区别点:
concat中,字符串或数组与null连接返回null
使用concat_ws时,字段中如有null,结果也不会变为null
▼ 举例说明:select concat_ws(':',''sum',null,'101');## 返回结果:sum:101select concat('a','-',null,'c');## 返回结果:null
▌regexp家族:说起正则,先提一嘴在sql中做关系匹配的方法LIKE法:采用的是通配符匹配方法正则法:常采用RLIKE或REGEXP关键字,用的是java那套逻辑
① LIKE:▼ 语法:
## 语法:- 语法1: A LIKE B - 语法2: LIKE(A, B)## 操作类型: strings## 返回类型: boolean(布尔值:true、false)或null▼ 注意点:LIKE使用通配符做匹配,如没出现通配符,默认为"="执行
通配符:B中字符"_"表示任意单个字符,字符"%"表示任意数量的字符
如果字符串A或者字符串B为NULL,则返回NULL
② RLIKE & REGEXP:▼ 语法:## 语法: - 语法1: A RLIKE B:表示B是否在A里面即可 - 语法2: RLIKE(A, B)## 操作类型: strings## 返回类型: boolean(布尔值:true、false)或null▼ 注意点:REGEXP用法与RLIKE等价
B中的表达式可以使用JAVA中全部正则表达式
如果字符串A或者字符串B为NULL,返回的结果是NULL,而非false;
▼ LIKE & RLIKE区别:相同点:RLIKE功能和LIKE功能大致一样,所有的LIKE匹配都可以被替换成RLIKE,反之,则不行。
区别点:LIKE是B中只支持简单表达式匹配(_%),而RLIKE则支持标准正则表达式语法。
A LIKE B :从头逐一字符匹配,精准匹配,表示B是否是A
A RLIKE B:可以从任意部位匹配,而且不是全部匹配,表示B是否在A里面即可
▼ 举例说明:select 'hivesql' rlike 'sql';## 返回结果:trueselect 'hivesql' like 'sql';## 返回结果:false③ REGEXP_EXTRACT:正则表达式解析函数▼ 语法:
## 语法: regexp_extract(string subject, string pattern, int index)## 返回值: string## 说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。# - 第一个参数:要处理的字段# - 第二个参数:需要匹配的正则表达式# - 第三个参数:0显示与之匹配额整个字符串,1显示第一个括号里的字段,2显示第二个括号内的..▼ 一些例子:select regexp_extract('今天是本年第12个月','(.*?)([[:digit:]]+)(.*?)',2);## 返回结果:12select regexp_extract('今天是本年第12个月','今天是本年第([[:digit:]]+)个月'); ## 返回结果:12,默认是1select regexp_extract('今天是本年第12个月','今天是本年第([[:digit:]]+)个月',0);## 返回结果:今天是本年第12个月,若index为0,则返回原字符
④ REGEXP_REPLACE:正则表达式替换函数▼ 语法:
## 语法: regexp_replace(string A, string B, string C)## 返回值: string## 说明:将字符A中的符合java正则表达式的部分替换为C
▼ 常用例子:select regexp_replace(str,'([^\\u4E00-\\u9FA5]+)','') as new_str1; -- 截取汉字部分select regexp_replace(str,'([^0-9]+)','') as new_str2;-- 截取数字部分select regexp_replace(str,'([^a-zA-Z]+)','') as new_str3;-- 截取字母部分select regexp_replace(str,'([^a-zA-Z0-9]+)','') as new_str4;-- 截取字母和数字
以上就是常用字符串函数介绍。还有些hive其他常用内置函数,咱们下篇见~
如若盼 追更 【日常学习】干货系列
欢迎大家转发,点亮在看你的鼓励,是对创造者最大的支持~也可以在公众号后台找到我,说说你的困惑 ~
往期好文推荐 『求职类』【数据分析岗】面试该如何做准备大厂面试官唠唠『优秀简历』长啥样?有关『SQL』有哪些考法?该如何备战?【数据分析岗】字节面试真题(含答案)+送100道面试题库『日常学习类』警惕数据分析中的『幸存者偏差』陷阱2种方法快速分析群体差异(附case)!『指标异动』贡献度定量归因之法,带你知因又知果!讲懂高频Hive:窗口函数(一)更多 『求职干货』 & 『日常学习』 系列好文,等你发现~
Ps. 微信推文改了规则
看完记得设置为 “ 星标 ”
不然我会消失的
点个在看,肝『干货』更有动力