反馈已提交

网络繁忙

SparkSQL字符串函数

  • 文档创建者:Roxy
  • 历史版本:9
  • 最近更新:Roxy 于 2024-04-03
  • 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表输入

    推荐使用FineDataLink 新增计算列中的FIND-返回字符所在位置

    10. 字符串位置

    POSITION(S1 IN S):返回字符串 S1 在字符串 S 中开始出现的位置,没有则返回 0。 

    示例:select POSITION('b' IN 'abcb') as ttt from DB表输入

    推荐使用FineDataLink 新增计算列中的FIND-返回字符所在位置

    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 ,结果如下图所示:

    附件列表


    主题: 数据开发
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持