1、数据契约是什么:从API文档到数据契约的演进
从API文档说起
先聊个我亲身经历的事。几年前我在一家金融科技公司带数据团队,每次上线新功能,数据对接都是一场噩梦。前端说「我传了 userId」,后端说「我收到的是 user_id」。两边吵了半天,最后发现是接口文档没更新。
你想想看,API文档这东西,说白了就是个「君子协定」。写的时候挺认真,一上线就没人管了。我见过最夸张的,文档里写着返回 10 个字段,实际接口返回了 15 个——多出来的 5 个字段还没人知道是干嘛用的。
为什么会这样?因为传统 API 文档有几个硬伤:
- 静态的——文档是写死的,代码是活的
- 单向的——只告诉消费者「有什么」,不告诉生产者「承诺什么」
- 无约束的——违反了也没人管,顶多线上报错
嗯,这里要注意。API文档不是不好,而是它只解决了「接口长什么样」的问题,没解决「接口应该怎么用、数据应该长什么样」的问题。
数据契约的核心定义
数据契约是什么?我个人的理解是——它是数据生产者和消费者之间的一份「有法律效力的协议」。
别被「契约」两个字吓到。它不是什么法律文件,而是一套技术规范。这套规范明确约定了:
- 数据长什么样(Schema)
- 数据什么时候到(SLA)
- 数据质量怎么保证(Quality)
- 数据变了怎么办(Evolution)
数据契约 = Schema + SLA + Quality + Evolution
它不是文档,是可执行的代码。契约一旦定义,生产者和消费者都要遵守。违反契约,系统会自动告警甚至阻断。
我在项目中遇到过一种典型场景:数据团队每天凌晨跑批,业务方早上 9 点要看报表。结果有一天批处理延迟到 10 点才跑完,业务方直接炸了。如果有数据契约,SLA 里就会写明「每日 8:00 前数据必须可用」,延迟了自动发告警,甚至触发降级策略。
说白了,数据契约就是把「口头承诺」变成「代码约束」。
为什么需要数据契约
这个问题我问过很多团队。答案五花八门,但核心痛点就三个:
| 痛点 | 表现 | 数据契约怎么解决 |
|---|---|---|
| 数据不一致 | 同一个字段,不同系统含义不同 | 契约强制统一 Schema 和语义 |
| 数据延迟 | 批处理跑完没人知道什么时候能用 | 契约定义 SLA,超时自动告警 |
| 数据变更失控 | 生产者改了字段,消费者毫不知情 | 契约版本管理,变更需双方确认 |
我记得有一次,一个核心数据表突然少了 30% 的记录。排查了一整天,发现是上游系统改了过滤逻辑,但没通知任何人。如果当时有数据契约,Schema 变更会自动触发兼容性检查,不通过就直接拒绝上线。
避坑指南:我曾经见过一个团队,花了两周时间写了一份 50 页的数据契约文档,结果没人看,也没人执行。数据契约不是文档,是代码。一定要把契约嵌入到 CI/CD 流程里,让它自动校验、自动告警。
数据契约的价值,我总结成三句话:
- 让数据生产者和消费者「说同一种语言」——字段名、类型、含义都统一
- 让数据质量「可度量、可追溯」——质量不达标,契约自动拦截
- 让数据变更「有感知、有管控」——变更有流程,不搞突然袭击
你想想看,如果没有数据契约,数据治理就是「事后救火」。有了数据契约,才能做到「事前预防」。
数据契约的核心知识体系
下面这张图,是我做数据治理这几年总结出来的数据契约核心框架。它把数据契约拆成了四个层次,从定义到执行,环环相扣。
我的建议:刚开始做数据契约,别想着一步到位。先从「定义层」入手,把最核心的几个数据表的 Schema 和 SLA 定下来。跑通了再往「执行层」和「治理层」延伸。贪多嚼不烂,这个坑我踩过。
数据契约不是银弹,但它确实是数据治理从「人治」走向「法治」的关键一步。后面我们会深入每个环节,看看具体怎么落地、怎么避坑。