ETL过程中数据清洗(脏数据处理)小结
在我们想尽各种办法把数据弄进数据仓库ods层后,接下来的事情就比较有意思了,并且比较重要,对后续的数据模型建设,数据质量的保证,甚至影响管理层的决策(就问你怕不怕?)
那么,对于ETL过程中的数据清洗,你一般会怎么做呢?但凡你真正的做过数仓,我认为这些都是轻车熟路的,因为这是数据研发的必经之路
我在对候选人进行考察的时候,也经常会问到这个问题,主要是看一下候选人有没有真实工作经验,然后在开发过程中有没有独立思考,并且知其然更知其所以然,但是候选人回答的都比较片面,比如只是处理空值,可能是公司数据质量的原因,但是就算公司业务库数据质量比较高,我们也应该需要全面的了解一些数据清洗规范。
那么我就来跟大家分享一下,工作中一般的数据清洗包含哪些并且一般怎么处理的吧。
一 空值处理
什么是空值,就是我们数据抽过来之后,发现有很多的字段为空,为了保证数据完整性或者方面后续的数据处理,这些我们都是需要预先处理的。一般使用默认值或者中位数,使用默认值的成本更低一点吧。
那么我们需要怎么处理呢,这个就要区分字段类型了。
类型 |
默认值 |
备注 |
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位吧?
这个具体怎么清洗,需要根据实际的业务场景。
本文转载自公众号:数据研发工程师,作者:工程师
原文链接:
https://mp.weixin.qq.com/s/L4j8LGrszwYP6VAm41yHQA
ETL过程中数据清洗(脏数据处理)小结相关推荐
- 电子签章过程中的原始数据处理
电子签章中需要对原文数据处理的地方主要存在于三种程中: 签名或验签 电子签章中的原文摘要 电子印章的使用者证书在电子印章中的保存方式 现在我们分别来看这三种情况下对原始数据的处理. 1.签名和验签 按 ...
- ETL流程、数据流图及ETL过程解决方案
文章目录 ◇ETL定义 ◇模式及比较 ◇ETL过程 ◇问题分析 ◇现状分析 一.ETL定义 ETL定义涉及以下内容: ETL定义 ETL前提 ETL原则 1.ETL定义 ◆定义: 数据的抽取(Extr ...
- 关于ETL过程如何保证数据量的准确性和数据的正确性的讨论
关于 ETL 过程如何保证数据量的准确性和数据的正确性的讨论 Flywolf2000 这个问题很简单,就是 ETL 过程中,你怎么保证数据的准确性,这个准确性包含两个方面:数据量的准确性,数值的正确性 ...
- ETL开发过程中遇到的问题
1 动态数据源的切换问题 近期在开发ETL过程中遇到了动态数据源的切换问题 要求是常规配置好自己的数据库 然后后期可以自定义连接数据 有点类似与msql的可视化连接工具 实际开发中主要遇到的一些问题 ...
- ubuntu安装过程中遇到问题小结
一.下载 官网下载地址:https://www.ubuntu.com/download/desktop/contribute?version=16.04.4&architecture=amd6 ...
- sas的安装过程中的问题小结
安装过程中出现了一个字体的问题:百度一大堆,没解决问题,直接跳过了,呃呃呃呃,虽然显示安装失败,硬着头皮往下装了反正.在打开sas的时候,又出现一堆问题. 第一个 解决办法:在自己安装目录下,找到 - ...
- 树莓派使用sim800过程中的一些小结
[转于] 风穴眼 http://blog.51cto.com/mayuenjkxt/1794487 2016年6月30日,从淘宝上购得一款树莓派的sim800扩展板,在使用过程中遇到了一些问题,在此记 ...
- P2V过程中问题解决方法小结
最近一段时间做了一些P2V迁移的事情,现在把过程中遇到的问题以及解决方法总结一些,以供有需要的同学进行参考. 目前遇到的这些问题大都是因为原来的物理机在安装系统的时候,启动方式选择的是UEFI方式,对 ...
- ETL过程及常用工具简介
一.什么是ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过 抽取(extract).转换(transform).加载(load) 至目的端的过程 ...
- 关于线程池运行过程中,业务逻辑出现未知异常导致线程中断问题反思
最近在项目研发中的关于线程池应用过程中由于业务逻辑异常导致的线程中断,但程序未中断导致的脏数据问题 话不多说,在最近最新的一个版本发布过程中,业务需要,我们要定期去给客户预留出可用的资源数据,提供客 ...
最新文章
- 字符串函数用法 php,PHP字符串函数print()的用法
- 灵活而又可怕的params参数数组
- python教程:ConfigParser模块使用教程
- qt 实现拖动矩形角度_手机上如何使用CAD角度标注功能?
- python下面的代码_解析一下下面的python代码?
- java与java ee_Java EE拦截器
- background-size 兼容ie8以下浏览器的方法
- plsql无监听程序_详细!看看顶级互联网公司都在研究的无服务器架构!
- 从数据库层面手动删除zabbix告警
- CentOS6.6 32位 Minimal版本纯编译安装Nginx Mysql PHP Memcached
- java filter重定向_Java Filter(过滤器)——重定向
- WPF中radiobutton 的 data binding方法
- HNUCM 1325:fps游戏
- 怎么才能免费下载CSDN资源
- Vue开发环境的搭建
- 内容下沉新时代:在一二线做品质,去三四线接地气
- 计算机音乐苹果铃声,iPhone实用技巧:怎么将抖音上的背景音乐制作成手机铃声-苹果手机铃声设置...
- 为浏览器添加Bing搜索引擎
- python 发音-python读音
- wamp php 如何安装,WAMP的详细安装过程分享