1. 数据契约概述:什么是数据契约、为什么需要数据契约、数据契约在湖仓中的角色
大家好,我是老赵。做数据架构这些年,我见过太多湖仓一体项目从「理想」滑向「混乱」。
数据源说改就改,消费方跑出来报表对不上数。两边互相甩锅,运维天天救火。
为什么会这样?说白了,就是生产者和消费者之间缺了一份「契约」。
1.1 什么是数据契约
数据契约,英文叫 Data Contract。它不是一份法律文件,而是一份技术约定。
我习惯把它理解成「数据界的 API 文档」。你想想看,微服务之间调用要定义接口规范,数据生产者和消费者之间,凭什么不需要?
数据契约的核心定义:
数据契约是数据生产者(Producer)与数据消费者(Consumer)之间,关于数据格式、语义、质量、时效性、SLA 的一份可编程、可验证的约定文件。
一份典型的数据契约,至少包含以下内容:
| 契约要素 | 说明 | 我踩过的坑 |
|---|---|---|
| Schema 定义 | 字段名、类型、是否必填、默认值 | 字段类型从 int 改成 string,下游解析直接崩 |
| 语义约束 | 字段的业务含义、枚举值范围 | status 字段 '1' 代表成功还是失败,两边理解不一致 |
| 质量规则 | 非空率、唯一性、值域校验 | 某字段突然 30% 为空,报表直接失真 |
| SLA 承诺 | 数据延迟上限、可用性、重试策略 | 承诺 T+1 的数据,实际 T+2 才到,业务方投诉 |
| 变更流程 | 版本号、变更通知窗口、兼容性策略 | 生产方偷偷加字段,消费方没感知,解析报错 |
我的经验:数据契约最好用 YAML 或 JSON 定义,存到 Git 仓库里。每次变更走 PR 评审,自动触发校验。别用 Word 文档,没人会去翻。
1.2 为什么需要数据契约
没有数据契约的湖仓,我见过太多惨状。
场景一:字段悄悄改了
上游业务系统升级,把一个字段从 varchar(50) 改成了 varchar(100)。没人通知下游。结果 ETL 任务跑着跑着就挂了,因为目标表字段长度不够。运维半夜被叫起来,查了半天才发现是上游改了。
场景二:数据质量没人管
某天数据湖里突然多了一堆空值。生产方说「我这边数据源就这样」,消费方说「你们得清洗啊」。两边扯皮,最后数据治理团队背锅。
场景三:SLA 形同虚设
湖仓里承诺「数据延迟不超过 1 小时」。实际上某个分区数据晚了 3 小时才到。消费方的实时看板直接展示错误数据,业务决策被带偏。
这些问题,本质上是信息不对称。生产方不知道消费方怎么用数据,消费方不知道生产方什么时候改数据。
数据契约要解决的核心问题:
- 生产方改数据时,必须通知消费方
- 消费方用数据时,可以信任数据质量
- 双方对「数据长什么样、什么时候到、质量如何」达成共识
我曾经在一个金融客户那里,帮他们落地数据契约。刚开始业务方觉得「多此一举」。直到有一次,核心风控表的一个字段类型变更,被契约自动拦截,避免了生产事故。从那以后,数据契约成了他们数据治理的「铁律」。
1.3 数据契约在湖仓中的角色
湖仓一体架构里,数据契约不是锦上添花,而是粘合剂。
我画了一张图,帮你理解数据契约在湖仓中的位置:
从这张图你能看到,数据契约不是挂在某个环节的「装饰品」。它横跨数据源、数据湖、数据仓库、数据消费,以及底层的治理监控。
具体来说,数据契约在湖仓中扮演三个关键角色:
- 守门员:数据进入湖仓时,契约校验 Schema 和质量。不合格的数据直接拦截,不让脏数据污染湖仓。
- 翻译官:生产方和消费方通过契约沟通。生产方改 Schema,契约自动生成变更通知。消费方订阅契约,随时知道数据状态。
- 裁判员:当数据质量出问题,契约是唯一的评判标准。谁违反了 SLA,谁破坏了 Schema,一目了然。
注意:数据契约不是一次性文档。它需要持续维护、持续校验。我见过团队签了契约就扔一边,结果数据还是乱成一团。契约要「活」起来,必须跟 CI/CD 流水线、数据质量监控平台打通。
举个例子。我之前帮一家电商公司做湖仓治理。他们的订单数据从 MySQL 同步到 Kafka,再入湖入仓。没有契约之前,经常出现字段对不上的问题。
后来我们引入了数据契约:
- MySQL 表结构变更时,自动触发契约校验
- Kafka 消息格式变化,契约自动拦截并告警
- 数据湖里的 Parquet 文件 Schema 与契约不一致,任务直接失败
效果很明显。数据质量问题从每周十几起,降到了每月一两起。而且出了问题,5 分钟内就能定位到是哪个环节、谁的责任。
我的建议:刚开始落地数据契约,别想着一步到位。先选一个核心数据域(比如订单、用户),把契约定义清楚,跑通流程。有了成功案例,再推广到其他域。步子迈大了,容易扯着蛋。
嗯,这一章我们先把数据契约的概念和角色理清楚。后面我会带你一步步看,怎么定义契约、怎么落地校验、怎么跟湖仓架构深度集成。