3. 数据质量维度:完整性、准确性、一致性、时效性、唯一性

聊数据管道健康度,绕不开数据质量。我见过太多管道,跑得飞快,延迟极低,但数据全是错的——这种管道,说白了就是「高速运垃圾」。所以这一章,我们得把数据质量的五个核心维度掰开揉碎讲清楚。

我个人习惯把这五个维度比作「数据体检的五项指标」。任何一个维度出问题,这条管道就得亮黄牌。咱们一个一个来过。

核心观点:数据质量不是「有就行」,而是「能用、敢用、放心用」。五个维度缺一不可,但不同业务场景侧重点不同。

3.1 完整性(Completeness)

完整性,就是数据有没有缺胳膊少腿。字段为空、记录缺失、分区丢失,都算不完整。

我在项目中遇到过最典型的场景:某天凌晨的ETL任务因为上游表结构变更,导致三个字段没写进去。下游报表跑出来,营收直接少了30%。老板开会时脸都绿了。

检查完整性,我一般用这几招:

  • 空值率监控:核心字段空值率超过阈值就告警
  • 记录数波动检测:今天的数据量跟历史均值比,偏差超过±20%要排查
  • 分区完整性校验:每天检查Hive/分区表是否所有分区都到位

我的习惯:完整性检查一定要放在管道最前面。数据都不全,后面算啥都是白搭。我曾经因为漏了这一步,排查了整整两天才发现是上游少传了一个文件。

3.2 准确性(Accuracy)

准确性,就是数据跟真实世界是不是一回事。字段值对不对?计算逻辑有没有偏差?

举个例子:用户年龄字段,有人填「-5」,有人填「200」。这种数据虽然完整,但明显不准确。你想想看,拿这种数据做用户画像,能靠谱吗?

我常用的准确性校验手段:

  • 值域校验:年龄0-120,金额非负,日期不能是未来
  • 业务规则校验:订单金额 = 单价 × 数量,这个等式必须成立
  • 交叉验证:用两个独立数据源互相核对,比如系统日志和数据库记录

注意:准确性问题是「慢性毒药」。它不会让管道立刻挂掉,但会慢慢腐蚀业务决策的可信度。我曾经见过一个推荐系统,因为用户行为数据准确性只有85%,导致推荐点击率从12%跌到4%。

3.3 一致性(Consistency)

一致性,就是不同地方的数据能不能对得上。同一个用户ID,在A表叫「user_id」,在B表叫「uid」,在C表叫「customer_no」——这种不一致,够你喝一壶的。

我遇到过最头疼的事:两个团队各自维护用户画像,一个用手机号去重,一个用设备ID去重。结果同一个用户,在两张表里被算成两个人。最后做用户总量统计时,数据差了30%。

一致性检查要点:

检查类型 说明 常见问题
格式一致 同一字段在不同表中格式统一 日期格式混用 yyyy-MM-dd 和 yyyy/MM/dd
编码一致 枚举值、状态码定义相同 订单状态「已支付」vs「PAID」vs「1」
逻辑一致 关联字段能正确匹配 外键在关联表中找不到对应记录

避坑指南:我曾经在数据仓库建模时,没统一字段命名规范。结果半年后,光「用户ID」这个字段就有7种写法。后来我强制要求所有表必须用数据字典,谁乱起名谁负责改。嗯,从那以后,一致性就好多了。

3.4 时效性(Timeliness)

时效性,就是数据从产生到可用,花了多长时间。说白了,数据是不是「热乎」的。

不同场景对时效性的要求天差地别:

  • 实时风控:延迟超过1秒,欺诈交易可能已经完成了
  • 离线报表:T+1能出就行,晚两小时问题不大
  • 实时大屏:延迟超过30秒,大屏上的数字就成「历史」了

我一般用「数据新鲜度」来衡量时效性。具体做法是:

-- 检查数据新鲜度的SQL示例
SELECT 
  MAX(event_time) AS latest_event,
  DATEDIFF('minute', MAX(event_time), NOW()) AS delay_minutes
FROM fact_orders
WHERE dt = '2024-01-15';

如果延迟分钟数超过SLA规定的阈值,就得告警了。

注意:时效性不是越快越好。我见过有人为了追求「实时」,把批处理改成流处理,结果数据一致性全乱了。时效性要和业务需求匹配,别为了炫技牺牲质量。

3.5 唯一性(Uniqueness)

唯一性,就是数据有没有重复。同一个业务实体,在数据里只应该出现一次。

重复数据的危害,我深有体会。有一次做用户留存分析,因为数据管道里有个去重逻辑写错了,同一个用户被算了两次。结果留存率从35%「涨」到了70%——老板差点因为这个错误决策多投200万预算。

唯一性检查方法:

  • 主键唯一性:检查主键字段是否有重复值
  • 业务唯一性:比如一个订单号只能对应一条记录
  • 去重率监控:计算去重前后的数据量比值,异常波动要排查

我的经验:唯一性问题往往出在数据合并阶段。多个数据源汇到一起时,重复记录最容易出现。我习惯在合并后立即做一次唯一性校验,宁可多花几分钟,也别让脏数据往下流。

3.6 五维度关系与评估框架

这五个维度不是孤立的。它们之间互相影响,甚至互相制约。你想想看:

  • 为了追求时效性,可能牺牲完整性(数据还没全到就开始处理)
  • 为了保证一致性,可能降低时效性(等所有数据对齐后再输出)
  • 准确性和唯一性出问题,完整性再高也没用

下面这张图,是我做数据质量评估时常用的框架:

数据质量五维度评估框架 数据质量 完整性 准确性 一致性 时效性 唯一性 五个维度互相影响,评估时需根据业务场景确定优先级和权重

在实际项目中,我一般会给每个维度打分(1-5分),然后加权计算综合健康度。比如:

维度 权重 评分标准
完整性 25% 核心字段空值率 < 1% 得5分,< 5% 得3分,超过10% 得1分
准确性 30% 校验通过率 > 99% 得5分,> 95% 得3分,低于90% 得1分
一致性 20% 跨表关联匹配率 > 99% 得5分,> 95% 得3分
时效性 15% 延迟在SLA内得5分,超出50%以内得3分,超出100%得1分
唯一性 10% 重复率 < 0.1% 得5分,< 1% 得3分

总结一下:数据质量评估不是一次性工作,而是持续的过程。我建议每个数据管道上线前,先把这五个维度的监控指标配好。别等出了问题再补,那时候代价就大了。