让决策更智能
新一代智能数据分析平台

字段拆分案例分享

观小远发表于:2021年03月18日 11:57:52更新于:2021年03月18日 12:09:14

需求背景:数据集中有字段结构为用分隔符连接起来的字符串,使用时需要拆分开只提取固定位置的字符串,或者整体拆分为多列。

案例一:新建计算字段,使用字符串截取函数,定位分隔符位置从而进行拆分。
实际路线示例:
0016052cd8dcae6bf46d9552df2b28c

1. 实际路线起始点
SUBSTR([实际路线],0,INSTR([实际路线],'-')-1)  或者 left([实际路线],INSTR([实际路线],'-')-1)
取第一个横杠之前字符串。
0016052cd8e458fc69de0b593c71039

2.实际路线剩余部分
SUBSTR([实际路线],INSTR([实际路线],'-')+1)
1和2能够拼接回完整的路线。
0016052cd8e39edf9878b5384f1d798

3.实际路线到达点
right([实际路线],instr(REVERSE([实际路线]),'-')-1)
0016052cd8e27c2fc946cdc971ca20f

4.实际路线剩余前半部分
REGEXP_EXTRACT([实际路线],'(.+)(-{1}.+)',1)
3和4能够拼接回完整的路线。
0016052cd8e5b1e5d2e6c10de7449c5

5.到达点是否是工厂
工厂的判断规则是纯字母,且结尾不是DC。

case
when SUBSTR([实际路线到达点],-2)<>'DC' and (SUBSTR([实际路线到达点],0,1)  <='Z' AND 'A'<= SUBSTR([实际路线到达点],0,1))
then '是'
when [实际路线到达点] is null or [实际路线到达点] = ''
then '否'
else '否'
end

0016052cd8e61cef9cef959349f2958
6.到达点是否是WS
WS的判断标准是纯汉字,无其他字母、数字。

case
when SUBSTR([实际路线到达点],-2)='DC' or (SUBSTR([实际路线到达点],0,1)  <='Z' AND 'A'<= SUBSTR([实际路线到达点],0,1))
then '否'
when [实际路线到达点] is null or [实际路线到达点] = ''
then '否'
else '是'
end


0016052cd8e6d3906cf115c9dc96391

7.到达点拆分
示例:
实际路线=BAD-沧州_沧县_忤龙堂
实际路线到达点=沧州_沧县_忤龙堂
到达点模糊处理1=沧州_沧县
到达点模糊处理2=沧州

到达点模糊处理1

REGEXP_EXTRACT([实际路线到达点],'(.+)(_{1}.+)',1)


到达点模糊处理2

case when INSTR([实际路线到达点],'_')>0
then SUBSTR([实际路线到达点],0,INSTR([实际路线到达点],'_')-1) end


0016052cd8e59c10d8bc7b64a5bfd45

案例二:新建计算字段,把原字段用分隔符拆分为数组,定位数组元素位置从而进行拆分。
原始字段示例:
0016052cd8e900445014fe5404188c0

  1. 拆分为 array:split([字段],'-')
    0016052cd8e70db73afcbe8486a48ee2. 去除结尾部分:array_join(slice([分割字符],1,size([分割字符])-1),'-')
    拆分字段 1:array_join(slice([分割字符],1,1),'')
    拆分字段 2:array_join(slice([分割字符],2,1),'')
    结尾部分:array_join(slice([分割字符],size([分割字符]),1),'')

    0016052cd8ea598f7794c297433a5b4

 

Note:以上函数可以用于 ETL 和非直连非加速数据集,直连数据集请使用对应数据库函数,高性能(加速)数据集需要使用 Clickhouse函数。

    您需要登录后才可以回复