数据质量六大维度:从理论到实战
聊数据质量,绕不开这六个维度。我入行那会儿,前辈丢给我一张表,上面就列着这六个词——完整性、准确性、一致性、及时性、唯一性、有效性。当时觉得不就是六个概念嘛,背下来就行。直到第一次上线数据管道,凌晨三点被电话叫醒,才发现每个维度背后都是真金白银的教训。
这六个维度,说白了就是衡量数据「好不好用」的六把尺子。咱们一个一个拆开看。
2.1 完整性:数据有没有缺胳膊少腿?
完整性检查的是数据有没有缺失。字段为空、记录丢失、文件不完整,都算。
举个例子,用户注册表里「手机号」字段允许为空,那营销活动就发不出短信。我遇到过最离谱的一次,某业务表的主键字段居然有 30% 是 NULL——嗯,建表时没设 NOT NULL,代码里也没做校验。
- 必填字段非空校验
- 记录数波动监控(比如日活突然少了一半)
- 文件行数与预期对比
2.2 准确性:数据是不是对的?
完整性只问「有没有」,准确性问的是「对不对」。用户年龄填 200 岁,订单金额是负数,这些数据虽然完整,但明显不对。
我记得有一次做电商数据治理,发现某条订单的支付金额比商品总价多了两个零。查了半天,是前端传参时单位搞混了——分和元没对齐。这种问题,光靠数据库约束抓不住,得靠业务规则。
| 场景 | 常见问题 | 校验方式 |
|---|---|---|
| 年龄字段 | 超过 120 岁 | 范围校验 0-120 |
| 订单金额 | 负数或超过阈值 | 业务规则 + 统计分布 |
| 时间戳 | 未来时间或 1970 年 | 时间范围约束 |
2.3 一致性:不同地方的数据打架吗?
一致性关注的是数据在不同系统、不同表、不同时间点之间是否矛盾。同一个用户,CRM 里叫「张三」,订单系统里叫「张先生」,这就叫不一致。
你想想看,数据仓库从三个源系统拉数据,如果每个系统对「订单状态」的定义都不一样——A 系统用 0/1,B 系统用「已支付/未支付」,C 系统用英文——那聚合出来的报表谁敢信?
我个人的做法是:在数据接入层统一做映射和标准化。不一致的问题,越早发现越容易修。
2.4 及时性:数据来得够快吗?
及时性衡量的是数据从产生到可用之间的延迟。实时报表要求秒级,离线分析可以容忍小时级,但不管哪种场景,超时的数据就是废数据。
我记得有一次做风控系统,规则要求交易数据必须在 5 秒内入湖。结果某天管道卡住了,延迟到了 30 秒——那 25 秒的窗口里,好几笔欺诈交易就这么溜过去了。
- 定义 SLA:数据必须在什么时间点前到达
- 监控延迟:实际到达时间 vs 预期时间
- 设置告警:延迟超过阈值自动通知
2.5 唯一性:数据有没有重复?
唯一性要求数据实体在数据集里只出现一次。同一个用户注册了两次,同一条订单被导入两遍,这些都是唯一性问题。
为什么会这样?最常见的原因是缺乏主键约束,或者去重逻辑有 bug。我遇到过最夸张的情况:某张客户表里,同一个手机号出现了 17 次,每次的姓名还都不一样——你说这数据怎么用?
2.6 有效性:数据符合业务规则吗?
有效性检查的是数据是否满足预定义的格式、类型、取值范围。比如邮箱字段必须包含 @,手机号必须是 11 位数字,国家代码必须在 ISO 标准列表里。
有效性和准确性有点像,但侧重点不同。准确性关心「值对不对」,有效性关心「值合不合规」。举个例子:用户填了手机号「13800138000」,这个号码是准确的(真实存在),但如果业务规则要求手机号必须以 1 开头且是 11 位,那它就是有效的。
| 维度 | 检查内容 | 示例 |
|---|---|---|
| 完整性 | 字段是否为空 | 手机号不能为 NULL |
| 准确性 | 值是否真实 | 手机号是真实存在的号码 |
| 一致性 | 跨系统是否统一 | 两个系统里手机号相同 |
| 及时性 | 数据是否按时到达 | T+1 数据在次日 8 点前到 |
| 唯一性 | 是否有重复 | 手机号在表里只出现一次 |
| 有效性 | 是否符合格式 | 手机号是 11 位数字 |
六大维度的关系
这六个维度不是孤立的。我习惯把它们分成两层:
- 基础层:完整性、唯一性、有效性——这三项是数据能用的前提
- 质量层:准确性、一致性、及时性——这三项决定了数据好不好用
基础层没过,质量层根本不用谈。你想想看,数据都不完整,谈什么准确?
实战中的优先级
六个维度都重要,但资源有限的时候怎么排?我个人的经验是:
- 先保完整性——数据都没了,其他免谈
- 再抓唯一性——重复数据会污染所有下游
- 有效性紧随其后——格式不对的数据处理起来很痛苦
- 准确性、一致性、及时性——这三项需要业务深度参与,逐步迭代