数据质量是数据治理的核心。

我们常说"垃圾进,垃圾出"。如果数据质量不好,再厉害的分析、再精准的算法,结果都是错的。但在实际工作中,数据质量问题无处不在:缺失值、重复值、异常值、格式错误、逻辑矛盾……

本文详细讲解数据质量的配置方法,从基础的质量维度、规则配置,到高级的质量监控、告警、根因分析,结合实际案例,帮你搭建一套完整的数据质量体系。

一、什么是数据质量

先说说什么是数据质量。

1. 数据质量的定义

数据质量,简单说就是数据满足需求的程度。

数据质量好,意味着数据:

  • 准确:数据反映真实情况
  • 完整:没有缺失
  • 一致:不同来源的数据不矛盾
  • 及时:数据是最新的
  • 唯一:没有重复
  • 有效:数据格式和范围正确

数据质量差,意味着数据有各种问题,用这样的数据做决策,会导致错误的结论。

2. 为什么数据质量重要

数据质量的重要性体现在:

  • 决策支持:管理层基于数据做决策,数据错了,决策就错了
  • 业务运营:业务系统依赖数据,数据错了,业务就出问题
  • 数据分析:分析的基础是数据,数据质量差,分析结果不可信
  • 机器学习:模型训练依赖数据,垃圾数据训练出垃圾模型
  • 合规要求:很多行业有数据合规的要求,数据质量不达标会被处罚

3. 数据质量问题的来源

数据质量问题的来源很多:

  • 数据源问题:源系统本身的数据就有问题
  • 采集问题:数据采集过程中出错,如字段映射错误
  • 传输问题:数据传输过程中丢失或损坏
  • 存储问题:存储格式不兼容,导致数据变形
  • 处理问题:ETL过程中逻辑错误,导致数据异常
  • 人为问题:人工录入错误,或误操作删除数据

二、数据质量的六大维度

数据质量可以从六个维度来衡量。

1. 完整性(Completeness)

完整性,是指数据是否完整,有没有缺失。

  • 字段缺失:某个字段的值为空
  • 记录缺失:应该有的记录没有
  • 范围缺失:某个时间段的数据缺失

常见问题:

  • 用户表中,手机号字段为空
  • 订单表中,某天的订单数据缺失
  • 商品表中,价格字段为空

配置方法:

  • 非空检查:关键字段不允许为空
  • 行数检查:每天的数据量在合理范围内
  • 时间连续性检查:日期字段连续,没有断点

2. 准确性(Accuracy)

准确性,是指数据是否准确,是否反映真实情况。

  • 数值错误:金额、数量等数值不对
  • 分类错误:类别、状态等分类不对
  • 逻辑错误:数据之间的逻辑关系不对

常见问题:

  • 订单金额是负数
  • 用户年龄是200岁
  • 订单状态是"已发货"但没有物流信息

配置方法:

  • 范围检查:数值在合理范围内(如年龄0-120)
  • 枚举检查:字段值在预定义的枚举值内
  • 逻辑检查:字段之间的逻辑关系正确(如发货时间 > 下单时间)

3. 一致性(Consistency)

一致性,是指同一数据在不同地方是否一致。

  • 跨表一致:同一指标在不同表中一致
  • 跨系统一致:同一数据在不同系统中一致
  • 跨时间一致:数据在时间维度上一致

常见问题:

  • 用户表中的用户数和订单表中的用户数对不上
  • 财务系统的收入和业务系统的收入不一致
  • 昨天的累计值和今天的期初值对不上

配置方法:

  • 跨表比对:同一指标在不同表中比对
  • 余额检查:期初 + 本期 = 期末
  • 趋势检查:数据的变化趋势在合理范围内

4. 及时性(Timeliness)

及时性,是指数据是否及时更新。

  • 数据延迟:数据没有按时产出
  • 更新频率:数据更新频率不满足需求
  • 数据时效:数据已经过时了

常见问题:

  • 每天的报表,下午才出,影响晨会
  • 实时数据延迟了几个小时
  • 用户信息更新了,但报表还是旧的

配置方法:

  • 产出时间检查:数据在规定时间前产出
  • 延迟监控:数据延迟不超过阈值
  • 更新频率检查:数据更新频率满足需求

5. 唯一性(Uniqueness)

唯一性,是指数据是否唯一,有没有重复。

  • 主键重复:主键字段有重复值
  • 记录重复:完全相同的记录出现多次
  • 业务唯一:业务上应该唯一的字段有重复

常见问题:

  • 用户表中,同一个用户ID出现多次
  • 订单表中,同一个订单号出现多次
  • 同一个用户用不同手机号注册了多个账号

配置方法:

  • 主键唯一检查:主键字段没有重复
  • 记录去重检查:没有完全重复的记录
  • 业务唯一检查:业务关键字段没有重复

6. 有效性(Validity)

有效性,是指数据格式和类型是否正确。

  • 格式错误:日期、手机号、邮箱等格式不对
  • 类型错误:字段类型不对,如数字字段存了字符串
  • 编码错误:编码不统一,导致乱码

常见问题:

  • 手机号是10位或12位
  • 邮箱格式不对
  • 日期格式不统一,有的是YYYY-MM-DD,有的是MM/DD/YYYY

配置方法:

  • 正则检查:字段符合正则表达式(如手机号、邮箱)
  • 格式检查:日期、时间等格式统一
  • 类型检查:字段类型正确

三、数据质量规则的配置

说说数据质量规则怎么配置。

1. 规则的基本结构

一条数据质量规则,通常包含以下要素:

  • 规则名称:规则的名字,要清晰描述规则
  • 规则类型:属于哪个质量维度
  • 检查对象:哪张表、哪个字段
  • 检查逻辑:具体的检查逻辑(SQL表达式或规则模板)
  • 阈值:允许的误差范围
  • 严重级别:高、中、低
  • 告警方式:邮件、短信、钉钉等
  • 负责人:谁负责处理这个规则的问题

2. 规则配置的方式

常见的规则配置方式有三种:

方式一:SQL规则

直接写SQL来检查数据质量。

-- 检查用户表中手机号为空的数量
SELECT COUNT(*) FROM users WHERE phone IS NULL OR phone = '';

-- 检查订单金额为负数的数量
SELECT COUNT(*) FROM orders WHERE amount < 0;

-- 检查用户ID重复的数量
SELECT user_id, COUNT(*) FROM users GROUP BY user_id HAVING COUNT(*) > 1;

优点:灵活,能实现复杂的检查逻辑。 缺点:需要写SQL,维护成本高。

方式二:规则模板

用预定义的规则模板,填写参数即可。

常见的模板:

  • 非空检查:表名 + 字段名
  • 范围检查:表名 + 字段名 + 最小值 + 最大值
  • 枚举检查:表名 + 字段名 + 枚举值列表
  • 正则检查:表名 + 字段名 + 正则表达式
  • 唯一检查:表名 + 字段名
  • 行数检查:表名 + 最小行数 + 最大行数

优点:简单易用,不需要写SQL。 缺点:灵活性有限,复杂逻辑实现不了。

方式三:可视化配置

通过可视化界面,拖拽配置规则。

这是最友好的方式,但需要数据质量平台的支持。

3. 规则的阈值设置

阈值的设置很重要,太严会误报,太松会漏报。

设置阈值的方法:

  • 历史数据法:根据历史数据的波动范围设置
  • 业务规则法:根据业务需求设置(如金额不能为负)
  • 统计方法法:用3σ原则,超过3倍标准差就算异常
  • 渐进式:先松后严,逐步收紧

建议:

  • 刚开始阈值可以松一点,先跑起来
  • 运行一段时间后,根据实际情况调整
  • 不同严重级别的规则,阈值可以不同

四、数据质量监控和告警

规则配置好了,还要有监控和告警。

1. 监控的方式

  • 定时监控:每天定时跑质量检查规则
  • 实时监控:数据流入时实时检查
  • 触发式监控:数据更新后触发检查

建议:

  • 核心数据:实时监控或准实时监控
  • 非核心数据:定时监控(每天或每小时)

2. 告警的方式

  • 邮件:适合非紧急的问题
  • 短信/电话:适合紧急的问题
  • 钉钉/企业微信:适合日常的问题通知
  • 仪表盘:可视化展示质量状况

3. 告警的分级

告警要分级,避免告警疲劳。

  • P0(紧急):核心数据严重错误,影响业务,立即处理
  • P1(高):重要数据有问题,当天处理
  • P2(中):一般数据问题,本周处理
  • P3(低):轻微问题,定期处理

4. 告警的收敛

告警太多,人就麻木了。要做告警收敛:

  • 合并:同一类问题合并成一条告警
  • 抑制:已知问题在处理中,不再重复告警
  • 升级:问题长时间未处理,升级告警
  • 静默:维护期间静默告警

五、数据质量问题的处理流程

发现数据质量问题后,要有处理流程。

1. 问题发现

通过质量监控规则,自动发现问题。

也可以通过业务反馈、分析发现等方式发现问题。

2. 问题确认

发现问题后,先确认问题:

  • 是真的有问题,还是规则误报?
  • 问题的影响范围有多大?
  • 问题的严重程度如何?

3. 问题分派

确认问题后,分派给对应的负责人:

  • 数据源问题:分给源系统负责人
  • ETL问题:分给数据开发
  • 业务问题:分给业务方
  • 规则问题:分给数据质量负责人

4. 问题修复

负责人修复问题:

  • 修复错误的数据
  • 修复导致问题的代码或流程
  • 补充缺失的数据

5. 问题验证

修复后,验证问题是否解决:

  • 重新跑质量规则,确认通过
  • 检查相关数据,确认没有其他问题
  • 确认业务方满意

6. 问题复盘

严重的问题,要做复盘:

  • 问题的根本原因是什么?
  • 为什么没有提前发现?
  • 以后怎么避免类似问题?
  • 需要增加什么规则或监控?

六、高级话题

说说数据质量的一些高级话题。

1. 数据质量评分

给数据质量打分,量化数据质量状况。

评分方法:

  • 每个规则有一个权重
  • 规则通过得满分,不通过得0分或部分分
  • 加权平均,得到整体质量分

质量分可以:

  • 按表打分:每张表的质量分
  • 按域打分:每个数据域的质量分
  • 按时间趋势:质量分的变化趋势

2. 数据血缘和根因分析

数据质量问题,往往是上游导致的。通过数据血缘,可以追溯问题的根源。

  • 数据血缘:记录数据从哪里来,经过了哪些处理
  • 根因分析:从问题数据出发,沿着血缘往上找,找到问题的源头

有了数据血缘,定位问题的效率会大大提升。

3. 数据质量和数据目录结合

把数据质量和数据目录结合,让用户在找数据的时候,就能看到数据的质量状况。

  • 每张表都有质量分
  • 每个字段都有质量标签
  • 用户可以选择高质量的数据使用

4. 自动化数据质量

理想的数据质量,是自动化的:

  • 自动发现数据源,自动推荐质量规则
  • 自动配置监控和告警
  • 自动发现问题,自动分派
  • 自动修复简单的问题
  • 自动生成质量报告

这需要AI和数据质量平台的支持。

七、实际案例

分享一个实际的数据质量配置案例。

案例:电商订单表的数据质量配置

订单表是电商的核心表,数据质量要求很高。

我们配置了以下规则:

完整性规则:

  • 订单ID不为空(P0)
  • 用户ID不为空(P0)
  • 订单金额不为空(P0)
  • 下单时间不为空(P0)
  • 每天订单量在1万-10万之间(P1)

准确性规则:

  • 订单金额 > 0(P0)
  • 订单状态在枚举值内(待支付、已支付、已发货、已完成、已取消)(P0)
  • 支付金额 = 订单金额 - 优惠金额(P1)
  • 发货时间 > 下单时间(P1)

唯一性规则:

  • 订单ID唯一(P0)

一致性规则:

  • 订单表的用户ID都在用户表中存在(P1)
  • 订单表的商品ID都在商品表中存在(P1)
  • 每天的订单金额和财务系统的收入一致(P1)

及时性规则:

  • 订单数据延迟不超过5分钟(P0)
  • 每日订单报表在早上8点前产出(P1)

有效性规则:

  • 手机号格式正确(P2)
  • 收货地址不为空且长度合理(P2)

这些规则配置好后,自动监控,发现问题自动告警。运行了一段时间后,订单表的数据质量明显提升。

八、常见的坑

说说数据质量配置中常见的坑。

1. 规则太多,告警泛滥

刚开始做数据质量,容易配置很多规则,结果告警太多,大家都麻木了。

建议:

  • 先配置核心规则,跑起来
  • 逐步增加规则
  • 做好告警分级和收敛
  • 定期清理无用的规则

2. 规则太严,误报太多

规则太严,会有很多误报,大家就不相信告警了。

建议:

  • 阈值设置要合理,参考历史数据
  • 先松后严,逐步收紧
  • 误报多的规则,及时调整

3. 只配置不处理

配置了很多规则,但发现问题没人处理,时间长了就形同虚设。

建议:

  • 每个规则都要有负责人
  • 建立问题处理流程和SLA
  • 定期复盘问题处理情况
  • 把数据质量纳入考核

4. 只关注技术,不关注业务

数据质量最终是为业务服务的。如果只关注技术指标,不关注业务影响,就会偏离方向。

建议:

  • 和业务方一起定义质量规则
  • 优先配置影响业务的规则
  • 用业务语言描述质量问题
  • 定期向业务方汇报质量状况

九、写在最后

数据质量,是数据工作的基础。没有好的数据质量,一切都是空中楼阁。

搭建数据质量体系,不是一蹴而就的。需要从基础的规则配置开始,逐步建立监控、告警、处理、复盘的完整流程。

2022年了,数据越来越重要,数据质量也越来越受到重视。希望这篇文章,能帮你搭建一套适合自己的数据质量体系。

最后,用一句话总结:"数据质量不是一次性的项目,而是持续的过程。配置规则、监控告警、处理问题、持续优化,一步一步来,数据质量会越来越好。"

愿你的数据,准确、完整、一致、及时。