1. 数据契约概述:什么是数据契约、为什么需要数据契约、数据契约的核心原则

1.1 什么是数据契约?

数据契约,说白了就是数据生产者和消费者之间的一份书面约定。

我习惯把它比作「API 的 API」。你想想看,服务之间调用有接口规范,数据在不同系统间流转,凭什么没有?

数据契约明确规定了:

  • 数据长什么样(Schema)
  • 数据什么时候到(SLA)
  • 数据质量多高(完整性、准确性)
  • 出了问题谁负责(Owner)

举个例子。我在项目中遇到过这样一个场景:业务方每天凌晨要跑报表,结果上游数据源突然改了字段类型,从 string 变成了 int。报表直接崩了。如果有数据契约,这种变更会提前通知,甚至自动拦截。

数据契约 = 数据生产方 + 数据消费方 + 中间约定

它不是一份文档,而是一套可执行、可验证的规则。

1.2 为什么需要数据契约?

这个问题我问过很多人。大部分人的第一反应是:「我们一直这么干,也没出啥大事啊。」

嗯,这话我信。但「没出大事」不代表「没问题」。

我总结了几类典型痛点:

痛点 表现 后果
字段变更无通知 上游删了字段、改了类型、加了非空约束 下游 ETL 任务失败,报表出不来
数据延迟不可控 说好凌晨 2 点到的数据,拖到早上 8 点 业务决策滞后,投诉不断
数据质量没人管 空值率突然飙升、重复记录暴增 分析结果失真,模型训练失败
责任边界模糊 出了问题互相推诿,找不到 Owner 修复周期长,信任崩塌

我曾经在一个数据平台团队待过。当时每天最怕的就是早上打开监控面板——满屏的红色告警。后来我们花了三个月,把所有核心数据链路都上了数据契约。效果立竿见影:告警量下降了 70%,而且每个告警都能直接定位到责任人。

说白了,数据契约解决的是信任问题。没有契约,数据消费方永远活在「不知道明天数据会变成什么样」的恐惧里。

我的建议:不要等到出事故了才上数据契约。从第一个跨团队数据接口开始,就把它写进契约里。成本最低,收益最大。

1.3 数据契约的核心原则

数据契约不是拍脑袋定的。我这些年踩过不少坑,总结下来,核心原则就四条。

原则一:显式约定

所有约定必须白纸黑字写下来,不能靠口头沟通或「大家都懂」。Schema、SLA、质量阈值、变更流程,一条都不能少。

我见过最离谱的情况:两个团队靠群沟通数据变更。结果群里消息一刷屏,变更通知就漏了。显式约定,就是要让机器也能读懂。

原则二:可验证

光写下来还不够,得能自动检查。数据契约里的每一条规则,都应该能写成自动化测试用例。

举个例子:

# 数据契约验证示例
契约 = {
  "表名": "order_daily",
  "字段": ["order_id", "amount", "status"],
  "约束": {
    "order_id": "非空且唯一",
    "amount": "大于 0",
    "status": "取值于 ['pending', 'paid', 'cancelled']"
  },
  "SLA": "每日 02:00 前到达",
  "质量阈值": {
    "空值率": "< 1%",
    "重复率": "< 0.1%"
  }
}

# 每次数据发布前,自动运行验证
def validate_contract(data, contract):
    # 检查字段完整性
    # 检查约束条件
    # 检查质量阈值
    pass

原则三:变更可控

数据契约不是一成不变的。业务在发展,数据在变化。但变更必须有流程、有通知、有缓冲期。

我习惯的做法是:

  1. 生产方发起变更请求
  2. 系统自动通知所有消费方
  3. 消费方在约定时间内确认或提出异议
  4. 变更生效,旧契约归档

我曾经因为一次紧急字段变更没走流程,导致下游 12 个任务全部失败。从那以后,我再也不敢跳过变更流程了。

原则四:责任明确

每条数据、每个字段,都必须有明确的 Owner。出了问题,第一时间能找到人。

Owner 不是挂个名就完事了。他需要:

  • 保证数据按时、按质交付
  • 响应消费方的变更需求
  • 处理数据质量问题

注意:Owner 不能是「团队」或「部门」。必须是具体的人名或系统账号。否则出了问题,还是会变成踢皮球。

1.4 数据契约的核心逻辑

说了这么多,我画了一张图,帮你把数据契约的整体逻辑串起来。

数据契约核心逻辑 数据生产方 数据消费方 数据契约 Schema · SLA · 质量阈值 · Owner 发布 订阅 自动验证引擎 驱动 通过 / 告警 / 阻断 反馈 反馈 数据契约不是静态文档,而是一个「发布 → 验证 → 反馈 → 迭代」的闭环

这张图想表达的核心思想是:数据契约不是静态文档,而是一个「发布 → 验证 → 反馈 → 迭代」的闭环。生产方发布契约,消费方订阅契约,验证引擎自动检查,结果反馈给双方。出了问题,马上能定位到人。

1.5 什么时候该上数据契约?

我经常被问到:「我们团队才 5 个人,需要数据契约吗?」

我的回答是:看情况。

这里给一个简单的判断标准:

场景 建议
单人维护,数据只给自己用 不需要,自己心里有数就行
跨团队数据共享 强烈建议,哪怕只是简单约定
数据用于关键业务决策 必须上,出问题就是事故
数据链路超过 3 跳 必须上,否则根本查不到根因
团队快速扩张中 建议上,趁早建立规范

我的经验:别想着一步到位。从最核心的一条数据链路开始,先跑通「发布 + 验证 + 告警」这个最小闭环。尝到甜头了,团队自然会主动推广。

1.6 小结

数据契约不是什么高深的概念。它就是一份约定,让数据生产方和消费方说清楚、写明白、能验证。

核心就四点:显式约定、可验证、变更可控、责任明确。

别把它想得太复杂。从一条数据链路开始,跑起来,你就知道它有多香了。