1. 概述
本文介绍 SparkSQL 中的字符串函数语法。
2. 字符串字符数
推荐使用FineDataLink 新增计算列中的LEN-返回字符长度。
CHAR_LENGTH(s):返回字符串 s 的字符数
CHARACTER_LENGTH(s):返回字符串 s 的字符数
LENGTH(S):返回字符串 s 的字符数
例如获取二级渠道名称的字符数,使用语句:select `二级渠道名` ,CHAR_LENGTH(`二级渠道名` ) FROM DB表输入,如下图所示:
3. 字符串拼接
3.1 说明
推荐使用FineDataLink 新增计算列中的 CONCATENATE-字符拼接
也可以使用 SparkSQL 中的语法:
CONCAT(s1,s2...sn):字符串 s1,s2... 等多个字符串合并为一个字符串。
示例:SELECT CONCAT('Fine','Data','Link')。
3.2 注意事项
问题描述:
使用「新增计算列」算子得到 13 位时间戳,拖入 Spark SQL 算子使用 CONCAT 函数拼接后,时间戳字段会变成科学计数法的文本。例如:正确情况应该是执行md5(concat(1700794824509),'固定key'))这个函数,实际执行时变成md5(concat(1700794824509E12),'固定key')),导致最终 MD5 加密结果变化。
解决方案:
将通过「新增计算列」算子得出的时间戳字段,使用「字段设置」算子改为 long 类型,再进行拼接。
4. 字符串反转
REVERSE(S):返回字符串 S 的反转结果。
例如将二级渠道名字段的字符串进行反转,使用语句:select `二级渠道名` ,reverse(`二级渠道名` ) FROM DB表输入,如下图所示:
5. 字符串截取
推荐使用FineDataLink 新增计算列中的 RIGHT-截取后几个字符串、MID-返回指定位置字符串、LEFT-截取前几个字符串
也可以使用 SparkSQL 语法:
名称 | parkSQL算子内用法 |
---|---|
左截断 | LEFT(expr, len) 示例:SELECT LEFT('FineDataLink',4) 例如截取「二级渠道名」左侧两个字符,使用语句:select `二级渠道名` ,LEFT(`二级渠道名`,2) FROM DB表输入,如下图所示: |
右截断 | RIGHT(expr, len) 示例:SELECT RIGHT('FineDataLink',8) 例如截取「二级渠道名」右侧两个字符,使用语句:select `二级渠道名` ,RIGHT(`二级渠道名`,2) FROM DB表输入,如下图所示: |
字符串截取 | SUBSTR(expr, pos, len) 示例:SELECT SUBSTR('FineDataLink',5,4) 例如截取「二级渠道名」D第三个字符开始的两个字符,使用语句:select `二级渠道名` ,SUBSTR(`二级渠道名`,3,2) FROM DB表输入,如下图所示: |
6. 字符串大小写转换
推荐使用FineDataLink 新增计算列中的 UPPER-转为大写字符、LOWER-大写转小写
也可以使用 SparkSQL 语法:
名称 | SparkSQL算子内用法 |
---|---|
小写转大写 | UPPER(expr) 示例:SELECT UPPER('FineDataLink') |
大写转小写 | LOWER(expr) 示例:SELECT LOWER('FineDataLink') |
7. 重复字符串
推荐使用FineDataLink 新增计算列中的:REPEAT-重复显示文本
也可以使用 SparkSQL 语法:
REPEAT(S,N):返回重复字符串 S 的次数 N。
示例:select repeat('xiao 小',2)
8. 补足字符串
LPAD(S1, LEN, S2):左补足,将 S1 用 S2 进行左补足到 LEN 位。
示例:
select `一级渠道名` ,`二级渠道名` ,lpad(`二级渠道名`,10,`一级渠道名` ) FROM
DB表输入
将二级渠道名用一级渠道名进行左补足到 10 位,返回的结果集如下图所示:
RPAD(S1, LEN, S2):右补足,将 S1 用 S2 进行右补足到 LEN 位。
示例:
select `一级渠道名` ,`二级渠道名` ,rpad(`二级渠道名`,10,`一级渠道名` ) FROM
DB表输入
将二级渠道名用一级渠道名进行右补足到 10 位,返回的结果集如下图所示:
9. 集合字符串查找
FIND_IN_SET(S, SL):返回字符串 S 在字符串 SL 第一次出现的位置,SL 是用逗号分割的字符 串。如果没有找该 S 字符串,则返回 0。
示例:select find_in_set('a 小 b','cd,ef,a 小 b,de') as ttt from DB表输入
10. 字符串位置
POSITION(S1 IN S):返回字符串 S1 在字符串 S 中开始出现的位置,没有则返回 0。
示例:select POSITION('b' IN 'abcb') as ttt from DB表输入
11. 字符串替换
REGEXP_REPLACE(S1, S2, S3):将字符串 S1 中的符合 java 正则表达式 S2 的部分替换为 S3。
示例:select regexp_replace("xiaoming", "ia|min", "tt") as ttt from DB表输入
即将 xiaoming 字符中 ia 和 min 替换为 tt ,结果如下图所示: