MaxCompute中如何处理异常字符

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

背景

在处理数据时,当业务数据同步至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”

     

解决方案

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

方案

描述

备注

本case是否适用

trim()函数

常规的首尾不可见字符处理

适用首尾部的空格、tab、换行

Yes

replace()函数

定向剔除字符串

适用于单个待替换的字符,多个需要层层嵌套

Yes

正则替换函数

定向剔除一类字符串

通过正则匹配符,替换一类字符串

Yes

方案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中的筛选方式筛出来,然后再做后续的替换或其他操作就可以了。

lQLPJxZt8w2hn7PNBAHNCkGwYhMu6WTj60YCtTUa9oCuAA_2625_1025.png

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
SQL 分布式计算 Unix
阿里云-DataWorks- ODPS SQL开发3-日期与字符、数学运算、聚合函数函数
阿里云-DataWorks- ODPS SQL开发3 本文主要讲解日常大量会接触到的一些常用的日期与字符、数学运算、聚合函数函数。
|
6天前
|
数据采集 SQL 监控
大数据清洗的艺术:有效处理缺失值、异常值与重复数据
【4月更文挑战第8天】本文探讨了大数据清洗的三个关键环节:缺失值处理、异常值识别与处理、重复数据消除。在处理缺失值时,涉及识别、理解原因、选择删除、填充或保留策略,并进行结果验证。异常值识别包括统计方法、业务规则和可视化检查,处理策略包括删除、修正和标记。重复数据的识别基于主键和关键属性,处理策略有删除、合并和哈希,处理后需持续监控。数据清洗是一门艺术,需要结合统计学、编程技能和业务理解。
63 2
|
6天前
|
SQL 分布式计算 API
MaxCompute异常问题之报错User not in whitelist in this region如何解决
MaxCompute异常涉及到在使用阿里云MaxCompute大数据计算服务时遇到的各种错误和问题;本合集将提供针对MaxCompute异常的分析和解决方案,帮助用户处理数据处理、分析任务中的异常情况。
|
6天前
|
SQL 分布式计算 Java
MaxCompute异常问题之插入语法异常如何解决
MaxCompute异常涉及到在使用阿里云MaxCompute大数据计算服务时遇到的各种错误和问题;本合集将提供针对MaxCompute异常的分析和解决方案,帮助用户处理数据处理、分析任务中的异常情况。
|
6天前
|
SQL 分布式计算 MaxCompute
MaxCompute异常问题之运行语句异常如何解决
MaxCompute异常涉及到在使用阿里云MaxCompute大数据计算服务时遇到的各种错误和问题;本合集将提供针对MaxCompute异常的分析和解决方案,帮助用户处理数据处理、分析任务中的异常情况。
|
6天前
|
SQL XML 分布式计算
MaxCompute异常问题之请求头异常如何解决
MaxCompute异常涉及到在使用阿里云MaxCompute大数据计算服务时遇到的各种错误和问题;本合集将提供针对MaxCompute异常的分析和解决方案,帮助用户处理数据处理、分析任务中的异常情况。
|
6天前
|
分布式计算 DataWorks 网络安全
DataWorks中绑定MaxCompute引擎时发生了非法参数异常
【1月更文挑战第6天】【1月更文挑战第27篇】DataWorks中绑定MaxCompute引擎时发生了非法参数异常
42 3
|
6天前
|
分布式计算 大数据 测试技术
在大数据计算MaxCompute中,odps在该时段是不是有什么异常
在大数据计算MaxCompute中,odps在该时段是不是有什么异常
24 1
|
Java 大数据 程序员
大数据开发基础的编程语言的Java的语言基础的异常
当我们在开发大数据应用时,Java作为一种非常流行的编程语言,被广泛应用。在Java中,异常是一个非常重要的概念,它可以帮助我们更好地处理程序中出现的错误情况。在本文中,我们将深入探讨Java异常的基础知识和使用方法。
60 0
|
编解码 Oracle 关系型数据库
【大数据实时数据同步】GoldenGate实时同步异常:OGG-03533:character ‘c2 a0‘ at offset 0 that is not available报错解决
博主所在单位目前使用Oracle GoldenGate将各个业务生产库汇聚到一起做数仓实时ODS平台,源端库可能涉及Oracle、Mysql、达梦、Guassdb库。 最近遇到了这个错误:`OGG-03533:character 'c2 a0' at offset 0 that is not available。` 导致报错的原因是源端库有业务人员手动用excel往数据库导入数据,源端库字符集:`AMERICAN_AMERICA.AL32UTF8` ,目标库ODS字符集:`AMERICAN_AMERICA.ZHS16GBK`。
【大数据实时数据同步】GoldenGate实时同步异常:OGG-03533:character ‘c2 a0‘ at offset 0 that is not available报错解决

热门文章

最新文章

相关产品

  • 云原生大数据计算服务 MaxCompute