ETL过程中数据清洗(脏数据处理)小结

在我们想尽各种办法把数据弄进数据仓库ods层后,接下来的事情就比较有意思了,并且比较重要,对后续的数据模型建设,数据质量的保证,甚至影响管理层的决策(就问你怕不怕?)

那么,对于ETL过程中的数据清洗,你一般会怎么做呢?但凡你真正的做过数仓,我认为这些都是轻车熟路的,因为这是数据研发的必经之路

ETL过程中数据清洗(脏数据处理)小结_第1张图片

我在对候选人进行考察的时候,也经常会问到这个问题,主要是看一下候选人有没有真实工作经验,然后在开发过程中有没有独立思考,并且知其然更知其所以然,但是候选人回答的都比较片面,比如只是处理空值,可能是公司数据质量的原因,但是就算公司业务库数据质量比较高,我们也应该需要全面的了解一些数据清洗规范。

那么我就来跟大家分享一下,工作中一般的数据清洗包含哪些并且一般怎么处理的吧。

ETL过程中数据清洗(脏数据处理)小结_第2张图片

一 空值处理

什么是空值,就是我们数据抽过来之后,发现有很多的字段为空,为了保证数据完整性或者方面后续的数据处理,这些我们都是需要预先处理的。一般使用默认值或者中位数,使用默认值的成本更低一点吧。

那么我们需要怎么处理呢,这个就要区分字段类型了。

类型

默认值

备注

string

'未知','unkown','-999'

描述,姓名

int

0

次数

bigint

0

次数

smallint/tinyint

0

是否

double

0

金额

decimal(16,4)

0

金额

datetime

1970-01-01 00:00:00

时间

以上会有一个小问题,string类型给了默认值之后,如果是主键,在进行join操作的时候,本来关联不上的,由于给了默认值,就能关联上了,这种情况可能要单独处理一下。

但是每种类型的默认值需要和数据分析师,业务方,需求方等其他部门同步一下,避免出现懵逼情况,比如 1970-01-01 00:00:00是个啥

二 数据格式处理

数据格式处理,主要包含2个方面,一个是复杂数据类型的解析处理,比如json解析等

另一方面是内容的统一,对于日期字段数据格式,可以统一为 yyyy-MM-dd

三 枚举值处理

我们的数据源可能会来自很多系统,业务开发的习惯可能不太相同,导致枚举值也不太一样,举个例子 a表的 1 代表 男,2代表女,b表的1代表女,2代表男,如果不统一一下的话,将来使用数据的时候就会产生误解,当作为关联条件去关联的时候,更会直接导致数据错误

四 字段类型处理

对于同一个字段,他们的字段类型我们需要做到统一,比如 订单id,不能a表是string类型,b表是bigint类型,统一为string类型不好吗?

五 注释处理

主要是对业务库没有注释的表或者字段进行补充完善。自己不太确定的需要及时找业务开发确认清楚。

六 敏感数据处理

理论上来说数仓的敏感数据都是需要加密的,直到输出到业务库或者其他服务于业务方的存储系统,我们在同步的时候需要解密传输。

对于姓名,手机号,身份证号,邮箱,银行卡号这些,我们都需要通过自带的加密函数或者udf函数进行加密,保证数据安全。

七 数据单位统一

数据单位统一,这个比较好理解了,比如金额,一张表是美元,一张表是人民币,你在对2张表的金额做操作的时候,是不是会有问题,所以这个需要提前定好,统一清洗。

八 逻辑错误清洗

举几个简单的例子:年龄不可能超过200岁吧,身份证号不可能是5位吧?

这个具体怎么清洗,需要根据实际的业务场景。

ETL过程中数据清洗(脏数据处理)小结_第3张图片

本文转载自公众号:数据研发工程师,作者:工程师
原文链接:
https://mp.weixin.qq.com/s/L4j8LGrszwYP6VAm41yHQA

你可能感兴趣的:(数据库,big,data)