一、数据契约概述:什么是数据契约

先问大家一个问题:你们团队里,数据提供方和数据消费方之间,有没有吵过架?

我猜大概率有。数据生产者说「我给了啊」,消费者说「你给的根本不能用」。这种扯皮,我见过太多次了。

数据契约,说白了就是给数据协作立个规矩。它是一份正式的、可执行的约定,明确告诉双方:谁生产数据、谁消费数据、数据长什么样、质量怎么保证。

我在项目中遇到过最典型的情况:业务部门要一份用户画像数据,数据团队给了,但字段名对不上、更新频率不一致、空值率超标。业务说「这数据没法用」,数据团队说「你又没说要什么格式」。嗯,这就是没有数据契约的后果。

数据契约的核心价值:把「我以为」变成「我们约定」,把口头承诺变成可验证的规则。

1.1 数据契约的三大核心要素

数据契约不是一张纸,它包含三个必须明确的要素。缺一个,契约就不完整。

要素 角色/内容 关键问题
生产者 数据的提供方,负责生成、维护、发布数据 谁负责?数据从哪里来?更新机制是什么?
消费者 数据的使用方,负责消费、处理、应用数据 谁在用?用在哪里?对数据有什么要求?
SLA 服务水平协议,定义质量、时效、可用性等指标 数据多久更新一次?允许的延迟是多少?空值率上限?

你想想看,如果这三个要素都明确了,数据协作还会乱吗?

生产者:不只是「谁产生的」

生产者不只是一个团队名。它要回答:数据从哪里来?是实时采集还是离线计算?数据模型是谁维护的?变更流程是什么?

我曾经帮一家电商公司梳理数据资产,发现同一个「订单金额」字段,三个系统各有一套计算逻辑。生产者是谁?没人说得清。这就是典型的「数据孤儿」问题。

我的建议:每个数据契约必须指定一个明确的生产者负责人。这个人要对数据的正确性、时效性、可用性负责。出了问题,能找到具体的人。

消费者:不只是「谁在用」

消费者同样需要明确。谁在用这个数据?用在什么场景?是实时交易还是离线报表?对数据质量有什么容忍度?

我记得有一次,数据团队把实时接口的延迟从秒级降到了毫秒级,结果消费方的系统反而崩溃了——因为消费方是按秒级延迟设计的,数据来得太快,缓冲区溢出了。你看,消费者没有说清楚自己的需求,生产者做了「过度优化」,反而出了问题。

SLA:数据契约的「硬约束」

SLA 是数据契约里最容易被忽视、也最容易引发争议的部分。它包含但不限于:

  • 时效性:数据多久更新一次?允许的最大延迟是多少?
  • 完整性:字段空值率上限?记录数是否完整?
  • 准确性:数据与源系统的偏差范围?
  • 可用性:接口可用性百分比?故障恢复时间?
  • 一致性:跨系统数据是否一致?如何校验?

避坑指南:我曾经见过一个团队,SLA 里只写了「数据每天更新一次」,结果消费者以为凌晨 1 点就能用,生产者实际是早上 8 点才跑完。双方各执一词。所以 SLA 一定要写清楚具体的时间点或时间窗口,比如「每日 06:00 前完成更新,允许 30 分钟延迟」。

1.2 数据契约与 API 契约的区别

很多人会问:数据契约和 API 契约是不是一回事?

嗯,有相似之处,但本质不同。我画个图帮你理解。

数据契约与 API 契约对比图 数据契约 vs API 契约 数据契约 关注:数据本身的结构与质量 范围:表、字段、记录、文件 约束:Schema + SLA + 血缘 变更:向后兼容要求严格 典型场景:数据仓库、数据湖 API 契约 关注:接口的行为与交互 范围:端点、方法、请求/响应 约束:OpenAPI + 状态码 + 限流 变更:版本管理 + 兼容策略 典型场景:微服务、BFF vs

区别在哪?我总结几点:

维度 数据契约 API 契约
关注点 数据本身(结构、质量、血缘) 接口行为(方法、参数、响应)
粒度 字段级、记录级 接口级、操作级
生命周期 数据从产生到消亡 接口从发布到废弃
变更影响 影响所有下游消费方 影响调用方
典型工具 Schema Registry、dbt、Great Expectations OpenAPI、gRPC、GraphQL
验证方式 数据质量检查、Schema 校验 契约测试、集成测试

说白了,API 契约管的是「怎么调」,数据契约管的是「数据本身是什么、好不好」。两者可以共存,但解决的问题不同。

我的经验:在微服务架构中,API 契约和数据契约往往需要配合使用。API 契约保证接口调用的正确性,数据契约保证数据内容的可靠性。我见过一个团队只做了 API 契约,结果接口调通了,但返回的数据是错的——因为数据生产方改了字段含义,没有通知消费方。

1.3 为什么数据契约是资产协作的基石

你想想看,企业里数据资产为什么难协作?

根本原因就一个:数据是流动的,但责任是静止的。生产者只管生产,消费者只管消费,中间缺了一个「连接器」。

数据契约就是那个连接器。它把生产者和消费者拉到同一张桌子上,把「模糊的期望」变成「明确的约定」。

我在一家金融公司做过一个项目,数据资产目录里登记了 2000 多张表,但实际被使用的不到 30%。为什么?因为没人知道这些表是谁生产的、质量怎么样、能不能用。后来我们给每张表都建立了数据契约,明确生产者、消费者和 SLA,使用率从 30% 提升到了 70% 以上。

数据契约的价值总结:

  • 减少沟通成本:不用再反复确认「这个字段是什么意思」
  • 提升数据质量:SLA 让质量问题可度量、可追溯
  • 加速数据消费:消费者可以信任数据,放心使用
  • 支撑数据治理:为数据资产化提供可执行的规则

嗯,这一章我们先把数据契约的概念讲清楚。后面我会带你一步步搭建完整的数据契约体系,包括怎么定义、怎么落地、怎么自动化。