一文讲透数据清洗流程与10大核心规则

很多人理解的数据清洗,就是:

空值补一下、重复数据删一下、日期格式统一一下。

真正做过企业数据项目以后就会发现,数据清洗最难的其实不是“怎么改”,而是:

  • 什么数据应该改?
  • 应该改成什么?
  • 改完以后怎么证明没有把正确的数据洗错?

同一个空值,可能代表“用户没有填写”,也可能代表“这个业务场景本来就不适用”;订单金额突然出现负数,可能是脏数据,也可能是一笔退款;两个客户姓名、手机号完全一样,也不能直接断定一定是重复客户。

所以数据清洗真正解决的,不只是格式问题,而是把原始数据一步步处理成:

结构统一、含义明确、逻辑合理、能够追溯、可以被下游稳定使用的数据。

如果你最近正好在做数据治理、数据集成或者数仓建设,可以先把这份《数据仓库建设解决方案》存下来,里面整理了不少数据架构、治理以及实际项目资料,后面梳理清洗规则时也能作为参考。

需要自取:数据仓库建设解决方案 - 帆软数字化资料中心

 

下面就把数据清洗到底怎么做,一次讲透。

 

一、数据清洗之前,先判断数据到底“脏”在哪里

企业里的数据问题,大致可以分成四层。

第一层是结构问题。

同一个客户编号,在CRM里叫 customer_id,ERP里可能叫 cust_no;一个系统日期是 2026-09-22,另一个系统却是 09/22/2026。

单独看都没有错,放到一起就无法直接使用。

第二层是内容问题。

空值、重复值、多余空格、乱码、大小写混乱、异常字符,都属于这一层。

 

第三层是业务逻辑问题。

下单时间晚于付款时间、员工离职日期早于入职日期、订单状态已经关闭但未结金额仍然大于0。

这些数据的数据类型甚至完全正确,但业务上解释不通。

第四层是跨系统一致性问题。

CRM里的客户等级是A,ERP里却是B;商品主数据已经停用,交易系统却还在继续产生订单。

所以清洗之前最好先形成一张:

问题 → 判断规则 → 处理动作 → 责任人 → 验证方式

的清单。

这也是为什么实际项目里,清洗往往要跟数据集成一起考虑。不同数据库、接口、文件进入 FineDataLink 5.0 后,可以继续进行过滤、字段处理、转换和映射,把不同来源之间最基础的结构差异先统一掉。

这样后续的数据质量规则面对的就不是一堆完全不同的原始格式,而是一套相对稳定的数据结构。

 

二、一套完整的数据清洗流程,至少要走5步

很多项目一上来就开始写SQL。

结果半年以后,没人知道某个字段为什么被改成了现在这个值。

更合理的顺序应该是:

第一步:数据画像。

先统计字段类型、空值率、重复率、唯一值数量、最大最小值、数据分布以及异常值占比。

先回答:

问题到底发生在哪里?影响了多少数据?

客户手机号缺失0.1%,和缺失40%,显然不是同一个问题。

 

第二步:定义规则。

把业务要求转化成机器可以判断的条件。

客户ID不能为空、订单号不能重复、折扣率必须在合理范围、付款时间不能早于下单时间……

这一步实际上是在定义:

什么叫“正确的数据”。

第三步:执行处理。

根据规则做过滤、替换、标准化、补齐、映射、拆分、合并、类型转换和去重。

第四步:异常隔离。

无法确定的数据不要直接删除。

更稳妥的方式,是把它们放进异常区,同时记录原始值、来源、异常原因和发现时间。

第五步:重新验证。

重新检查空值率、重复率、异常率、记录总数以及关键业务指标。

因为程序执行成功,只能证明任务跑完了。

不能证明数据真的洗对了。

 

三、真正实用的数据清洗,要掌握这10条核心规则

  1. 空值处理:先判断“空”代表什么

NULL、空字符串、0、“未知”、“N/A”,不能简单视为同一种状态。

销售额为0,表示确实没有销售;

销售额为NULL,则可能表示数据根本没有采集到。

所以空值通常有四种处理:

补齐、保留、过滤、进入异常区。

能不能补,关键看有没有可靠依据。

能根据城市编码反推出省份,可以补;客户生日没有任何来源,就不要凭平均值硬填。

  1. 重复数据:先定义业务主键,再谈去重

最危险的去重方式,就是直接:

DISTINCT

因为技术上完全相同,才叫“行重复”;业务上的重复往往复杂得多。

客户可能按照手机号+证件号判断;

订单按照订单号判断;

用户行为可能需要:

用户ID + 行为类型 + 时间戳

共同判断。

发现重复以后,还必须继续确定:

保留最新、保留最早、按照来源优先级保留,还是合并字段?

所以去重真正难的,是业务身份识别。

 

  1. 格式标准化:让“同一个东西”真正变成同一个值

北京

北京市

BEIJING

如果没有统一规则,在计算机眼里就是三个不同的值。

日期、地址、手机号、币种、计量单位、大小写都存在类似问题。

格式标准化本质上是在解决:

同义不同值。

  1. 数据类型转换:转换失败必须有去处

字符串 "100" 可以转换成100。

那 "100元"、"-"、"未知" 怎么办?

生产环境里不能只考虑转换成功的数据,还要提前定义:

失败以后置空、保留原值、终止任务,还是进入异常表。

否则一条异常记录就可能让整批任务失败。

  1. 文本清洗:小字符也会制造大问题

首尾空格、换行符、不可见字符、全角半角、大小写差异,经常会造成:

肉眼看起来一样,系统判断却不相等。

而且很多企业并不是一张表存在这种问题,而是几十张表、几百个字段反复出现。

这时候如果每条任务都重新写一遍替换逻辑,规则很快就会失控。FineDataLink 5.0 里可以维护全局清洗规则,让存在同类问题的字段引用统一规则,后面规则发生调整时,也不需要重新翻大量任务逐个修改。其数据管理模块本身也把全局清洗规则作为独立能力管理。

 

  1. 枚举值校验:防止业务状态悄悄失控

假设订单状态只有:

待支付、已支付、已发货、已完成、已关闭。

某天突然出现:

成功

不能简单替换成“已完成”。

因为它可能意味着上游系统新增了状态,也可能意味着接口映射出了问题。

枚举校验首先负责的是:

发现未知值。

确认含义以后,再决定映射还是修正。

  1. 范围校验:异常值不等于错误值

年龄300岁,大概率有问题;

订单金额100万元,却未必错误。

所以范围检测可以把数据分成:

确定非法、值得关注、正常。

真正成熟的规则不会把所有离群值直接删除,而是根据业务风险设置不同处理级别。

 

  1. 关联完整性:避免产生“孤儿数据”

订单里的客户ID,应该在客户主表中存在;

商品明细里的商品编码,应该能找到对应商品;

员工记录里的部门ID,也应该对应有效组织。

如果事实数据找不到对应主数据,就会形成大量“孤儿记录”。

这一类问题靠单表清洗通常发现不了。

  1. 业务逻辑校验:从“字段正确”走向“业务正确”

真正复杂的问题往往发生在字段之间。

比如:

下单时间 ≤ 支付时间 ≤ 发货时间

或者:

实付金额 = 商品金额 + 运费 - 优惠金额

每个字段单独看都合法,但组合以后可能完全矛盾。

所以清洗做到后面,检查对象必须从:

一个字段

逐渐走向:

多个字段、多个表甚至一整个业务流程。

这里其实已经开始进入数据质量管理。FineDataLink 5.0 的数据检测可以围绕唯一性、完整性、字段格式、枚举值等设置检测规则,还能记录部分检测失败后的异常明细。

这样清洗规则负责“怎么处理”,检测规则继续回答“处理完以后还有多少问题”,两者分开以后,整条链路会更容易定位问题。

 

  1. 敏感数据处理:干净不代表可以随便用

手机号、身份证号、银行卡号、详细地址等字段,即使数据完全准确,也不能直接进入所有下游环境。

数据进入测试、开发、分析或者外部共享场景以前,还需要根据使用目的进行:

脱敏、加密、隐藏或者权限控制。

所以数据清洗最后处理的已经不只是“正确性”,还包括数据的使用边界。

 

四、清洗规则最好分三层,不要全塞进一段SQL

很多企业的数据清洗后期越来越难维护,核心原因就是:

所有逻辑都堆在一个任务里。

更清晰的方式,是拆成三层。

第一层是技术标准化:

字段类型、格式、编码、空格、字符、单位统一。

第二层是数据质量处理:

空值、重复、枚举、范围、完整性。

第三层是业务规则处理:

订单状态、客户关系、指标逻辑、跨系统一致性。

这样以后出现问题,才能快速判断:

到底是原始格式错了、质量规则出了问题,还是业务口径发生了变化。

否则一段几千行SQL运行半年以后,往往没人敢修改。

 

五、数据清洗之后,一定要再建立一道“质量门禁”

数据清洗最危险的情况,不是任务直接失败。

而是:

任务成功了,但数据被洗错了。

所以清洗后的数据进入数仓、报表或者AI分析以前,至少应该重新检查:

空值率、重复率、格式正确率、异常值占比、记录数变化,以及关键金额、订单量、库存量等业务指标。

这里还应该给不同规则设置不同等级。

客户ID重复、财务金额不平,这类问题可以直接阻断下游;

非核心备注字段出现少量空值,则可以先预警,再安排治理。

FineDataLink 5.0 的数据检测也区分了强规则和弱规则:强规则不通过会影响最终检测结果,弱规则则可以用于预警类问题。把这种思路放进清洗体系里,数据质量就不再只有“通过/失败”两个状态,而是开始按照业务影响程度分级管理。

 

六、数据清洗真正成熟的标志,是“可追溯”

一套清洗规则上线以后,不能只留下最终结果。

还应该能够回答:

  • 为什么要改?
  • 按照什么规则改?
  • 原始值是什么?
  • 什么时候开始执行?
  • 是谁确认的?

因为业务规则一直会变化。

今天“会员等级A”代表年消费10万元,明年可能调整成15万元;原来合法的订单状态,下个月也可能因为系统升级而增加新的枚举值。

如果没有规则版本和原始数据,后续很难重新计算。

所以重要数据最好形成三个层次:

  • 原始数据保留事实;
  • 清洗层执行统一规则;
  • 应用层提供业务可用数据。

这样即使清洗规则发生变化,也还有机会回到原始事实重新处理。

 

结语

很多人把数据清洗理解成一项很基础的技术工作。

其实真正成熟的数据清洗,背后同时包含:

数据标准、业务规则、质量管理和治理责任。

  • 确定错误的数据,可以修正;
  • 有可靠依据的数据,可以补齐;
  • 无法确认的数据,应该隔离;
  • 超出正常范围但可能真实的数据,则应该保留并进一步核查。

因此,数据清洗真正追求的从来不是把数据“洗得特别漂亮”。

而是让每一次修改都有依据,每一个异常都有去处,每一条规则都能解释,每一次处理都能验证。

做到这一步,数据才真正从:

“系统里存着”

变成:

“业务敢拿来做决策”。

posted @ 2026-10-05 07:41  智慧园区-老朱  阅读(5)  评论(0)    收藏  举报