3. 数据质量维度详解:完整性、准确性、一致性、及时性、唯一性、有效性
聊数据质量,绕不开这六个维度。我入行头两年,总觉得这些概念太虚——不就是数据干不干净吗?后来被线上事故教育了几次,才明白每个维度背后都是真金白银的代价。
这六个维度,说白了就是六把尺子。你用它们量一量数据,就知道问题出在哪。咱们一个一个拆开讲。
核心观点:数据质量不是非黑即白,而是按业务场景定义的可接受程度。六个维度帮你把模糊的“数据好不好”变成可量化的指标。
3.1 完整性
完整性,就是数据有没有缺胳膊少腿。字段为空、记录缺失、关联断裂,都算不完整。
我见过最典型的案例:某电商平台做用户画像分析,结果 30% 的用户手机号为空。运营团队拿着这份数据做精准营销,短信发出去一半是空号。你说这钱花得冤不冤?
完整性检查,我习惯分三层:
- 字段级:必填字段是否有空值。比如订单表的订单号、金额、用户ID,一个都不能少。
- 记录级:业务主键是否完整。比如一张销售单,头表有数据,行表却丢了明细。
- 关联级:外键引用是否存在。订单引用了不存在的用户ID,这就是关联断裂。
我的习惯:建表时就定义 NOT NULL 约束,ETL 入口加空值检测。别等到数据进仓库了再补,成本翻十倍。
3.2 准确性
准确性,衡量的是数据与真实值之间的偏差。说白了,数据对不对?
举个例子:用户填的出生年份是 1800 年,语法上没毛病,字段类型也对,但显然不准确。这种问题在业务系统中特别常见。
我曾在某银行项目里遇到一个坑:核心系统的账户余额字段,因为精度截断问题,每天少算 0.01 元。单看一笔没问题,但累计 100 万笔交易,一天就差了 1 万块。财务对账时才发现,折腾了整整两周。
准确性校验,常用的手段:
- 业务规则校验:年龄 0-150,金额非负,日期不晚于今天。
- 交叉验证:用两个独立来源的数据互相核对。比如银行流水和会计凭证对账。
- 统计分布检测:突然出现离群值,大概率是数据录入错误。
注意:准确性是成本最高的维度。100% 准确几乎不可能,建议按业务容忍度设定阈值。比如金融交易要求 99.999%,用户画像 95% 可能就够了。
3.3 一致性
一致性,就是同一个概念在不同地方不能打架。你想想看,CRM 系统里叫“客户”,ERP 里叫“顾客”,数据仓库里叫“消费者”——这三个是不是一回事?如果是,那它们的编码、名称、分类就得统一。
我遇到过最头疼的情况:某集团有 5 套业务系统,每套系统对“省份”的编码都不一样。有的用数字代码,有的用拼音缩写,还有的直接写汉字。做数据汇总时,光映射表就写了 200 行。
一致性问题的根源,往往是缺乏企业级数据标准。解决思路:
- 统一编码规范:主数据管理(MDM)是治本之策。
- 建立映射关系:短期内无法统一,至少要有标准的转换规则。
- 定期对账:跨系统数据定期比对,发现不一致及时告警。
| 不一致类型 | 典型场景 | 影响 |
|---|---|---|
| 命名不一致 | 同一字段不同系统叫法不同 | 数据集成困难,开发成本高 |
| 编码不一致 | 性别:A系统用0/1,B系统用M/F | 数据合并出错,分析结果失真 |
| 业务规则不一致 | 订单状态流转逻辑不同 | 跨系统业务流程断裂 |
3.4 及时性
及时性,数据从产生到可用,不能太慢。这个维度在实时场景下尤其重要。
举个例子:风控系统需要秒级响应。如果交易数据延迟 5 分钟才入库,骗子早就把钱转走了。反过来说,月报数据晚半天出,其实问题不大。
所以及时性没有统一标准,完全看业务容忍度。我一般这样定义:
- 实时类:秒级到分钟级。比如交易监控、实时推荐。
- 准实时类:分钟级到小时级。比如库存同步、订单状态更新。
- 批量类:小时级到天级。比如报表、数据仓库 ETL。
避坑指南:我曾经在项目中只关注了 ETL 跑完的时间,忽略了数据源本身的延迟。结果报表准时出了,但数据是 2 小时前的。记住,及时性要从数据产生那一刻算起。
3.5 唯一性
唯一性,就是数据不能重复。同一个客户、同一笔订单、同一个产品,在系统里只能有一条记录。
重复数据的危害,做过营销的人都懂。我见过一个极端案例:某公司 CRM 里同一个客户录入了 7 次,每次联系方式还不一样。销售团队给这个客户打了 7 通电话,客户直接投诉骚扰。
唯一性保障,核心靠主键和唯一约束。但现实往往更复杂:
- 自然主键 vs 代理主键:身份证号是自然主键,但可能为空或变更。我习惯用自增 ID 做代理主键,再加业务唯一索引。
- 模糊去重:姓名+手机号+地址,三个字段相似度超过 90% 就认为是同一个人。这需要算法支持。
- 合并策略:发现重复后,是保留最新、保留最全,还是人工介入?提前定好规则。
注意:唯一性检查不能只靠数据库约束。ETL 过程中也要做去重,否则数据加载到一半报主键冲突,整个任务就挂了。
3.6 有效性
有效性,数据是否符合定义的格式、范围、业务规则。它和准确性有点像,但侧重点不同——有效性更关注“格式对不对”,准确性关注“值对不对”。
比如邮箱字段:abc@com 格式不对,这是有效性问题;abc@company.com 格式正确但这个人已经离职了,这是准确性问题。
有效性检查,我一般分几类:
- 格式校验:手机号 11 位、邮箱含 @、日期格式 yyyy-MM-dd。
- 值域校验:性别只能是男/女/未知,订单状态只能是已定义的几种。
- 业务规则校验:下单时间不能晚于发货时间,折扣不能超过 100%。
-- 有效性检查 SQL 示例
-- 检查订单表中的无效数据
SELECT
order_id,
CASE
WHEN order_amount <= 0 THEN '金额无效'
WHEN order_date > ship_date THEN '日期逻辑错误'
WHEN status NOT IN ('待支付','已支付','已发货','已完成','已取消') THEN '状态无效'
ELSE '有效'
END AS validation_result
FROM orders
WHERE
order_amount <= 0
OR order_date > ship_date
OR status NOT IN ('待支付','已支付','已发货','已完成','已取消');
总结一下:六个维度不是孤立的。完整性是基础,准确性和有效性是核心,一致性是跨系统协作的关键,及时性决定数据价值,唯一性避免资源浪费。实际项目中,我建议先做完整性检查,再逐步展开其他维度。一口吃不成胖子,数据治理也是。