写点什么

MaxCompute 中如何处理异常字符

  • 2023-06-14
    浙江
  • 本文字数:1367 字

    阅读完需:约 4 分钟

MaxCompute中如何处理异常字符

背景

在处理数据时,当业务数据同步至 MaxCompute 后,会产生一些含异常字符的脏数据,比如字段中包含了一个不可见字符,在 DataWorks 中显示不出来,但在 BI 界面又会显示成其他字符,影响整体观感。这种情况,通常我们的解法是,将异常的字符洗掉,下面来介绍几种常见的处理异常字符的方法。

问题描述

定位

如下图,可以看到“异常 name”和“正常 name”的 length 值 不同,多了个不可见字符,但是我们并不能看出来啥。后期做数据处理或数据展示可能成为一个难以定位的问题。


SELECT     name as 异常name,    LENGTH(name) as 异常name长度,    '北京'  as 正常name,    LENGTH('北京') as 正常name长度from tbl1 where name RLIKE '北京';
复制代码


结果:


小技巧

  • 我们可以通过在线Unicode编码转换工具,将数值粘贴过去,获取到对应的 Unicode 码。同理也可以获取其他异常字符的 Unicode 码,以便后续处理。

  • 输入异常 vs 正常的字符串,对比 Unicode 差异可以倒推不可见字符为“ \u200b”


解决方案

  • 定位到问题后,回顾数据清洗的常规方案,想办法把消掉这种不可见字符


方案 1:trim() - 替换


效果如下:


  • 利用 trim() 函数将数值中的异常不可见字符替换为正常空值字符(不可见字符可通过在线Unicode编码转换工具Unicode 转中文复制一下)


SELECT     name as 异常name,    LENGTH(name) as 异常name长度,    trim(name,'')  as 正常name,  LENGTH(trim(name,'')) as 正常name长度from tbl1 where name RLIKE '北京';
复制代码


结果:


方案 2:replace() - 替换


效果如下:


  • 利用 replace() 函数将数值中的异常不可见字符替换为正常空值字符(不可见字符可通过在线Unicode编码转换工具Unicode 转中文复制一下)


SELECT  name as 异常name, LENGTH(name) as 异常name长度, replace(name,'','')  as 正常name, LENGTH(replace(name,'','')) as 正常name长度from tbl1 where name RLIKE '北京';
复制代码


结果:


方案 4:正则表达式 - 替换

  • 使用函数一层一层替换会比较麻烦,目前 MaxCompute 支持通过正则表达式匹配出异常的字符

  • 只要筛选出了带有异常的一部分字符,再处理就方便很多了

  • 例如上文中的不可见字符,Unicode 码为“\u200b”,通过执行如下 SQL


select id,name from tbl1 where name rlike '[\x{200b}]';
复制代码


结果返回:



  • 此时如果再用 regexp_replace()函数可以替换掉这一部分含不可见字符的数值


-- regexp_replace()函数SELECT  name as 异常name, LENGTH(name) as 异常name长度, regexp_replace(name, '[\x{200b}]', '',0)  as 正常name, LENGTH(regexp_replace(name, '[\x{200b}]', '',0)) as 正常name长度FROM tbl1;
复制代码


结果:


总结

针对于 SQL 中的不可见字符或者其他中文等异常字符,都可以使用方案 3 中的筛选方式筛出来,然后再做后续的替换或其他操作就可以了。


【MaxCompute 已发布免费试用计划,为数仓建设提速】新用户可 0 元领取 5000CU*小时计算资源与 100GB 存储,有效期 3 个月。  立即领取>>


欢迎各位开发者加入大数据计算 MaxCompute 社区立即加入

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2020-10-15 加入

分享阿里云计算平台的大数据和AI方向的技术创新和趋势、实战案例、经验总结。

评论

发布
暂无评论
MaxCompute中如何处理异常字符_大数据_阿里云大数据AI技术_InfoQ写作社区