首页/数据/数据工程与 ETL 速查/数据契约 Data Contract
管道基础52 条

数据契约 Data Contract

数据契约把上下游对表结构、字段语义、质量期望与产出时间的约定显式化:上游变更流程化,下游按契约做校验与告警,减少“悄悄改字段”事故。

数据契约解决什么问题

数据契约(Data Contract)把上下游之间的口头约定变成可校验的文件:表结构、字段语义、主键、质量规则、产出时间都写成明确条款。它的价值不在文档本身,而在于契约能被流水线读取和校验——上游改了字段却没走流程,校验就会失败并阻断发布,而不是等到下游报表出问题时才发现字段悄悄变了。

基本信息

契约内容schema、字段语义、主键、质量规则、产出 SLA
载体YAML/JSON 契约文件,或登记在元数据平台
执行方式发布前结构比对 + 运行时质量稽核
责任划分上游 owner 负责变更,下游负责校验与告警

典型使用场景

  • 跨团队数据交付:把交付物写清楚,减少对接期的反复确认
  • 上游结构变更管控:变更必须先改契约并通过兼容性检查
  • 质量前置:契约里的规则直接生成稽核任务与告警
  • SLA 追责:产出时间写进契约,超时按约定级别通知
  • 资产盘点:以契约为单位登记数据集,明确 owner 与责任人

契约示例(YAML 片段)

契约示例(YAML 片段)
dataset: dwd.orders                    # 数据集唯一标识
owner: data-platform                   # 责任人/团队
schema:
  - name: order_id
    type: string
    nullable: false                    # 主键字段不允许为空
  - name: amount
    type: decimal(10,2)
  - name: status
    type: string
    enum: [paid, refunded, closed]     # 枚举取值写清楚,新增值需走变更
sla:
  freshness: "02:00"                   # 每日 02:00 前产出
quality:
  - rule: unique(order_id)             # 主键唯一
  - rule: amount >= 0                  # 金额非负

契约要素与落地动作

要素写什么怎么落地
schema字段名、类型、是否可空发布时比对,类型收窄必须走变更
字段语义业务含义与枚举取值写入字段描述,供下游取数与排查
主键唯一性口径自动生成唯一性稽核任务
质量规则非空、范围、枚举、唯一接入质量平台,按严重级别告警
SLA产出时间与更新频率调度侧监控超时并对接告警
契约只有在配合校验清单时才有约束力:每次发布跑结构比对,运行时跑质量规则并对齐告警,否则它会退化成一份没人看的说明文档。
枚举值这类「软约定」最容易漏:上游新增状态码时不会报错,只会让下游统计口径悄悄失真,必须把枚举写进契约并加白名单校验。

易错点

  • 契约写成一次性文档,源端改字段后不更新,等于没有契约
  • 只定义字段不定义缺失值语义(空串还是 NULL),空值处理仍会在下游反复扯皮
  • 破坏性变更绕过兼容性检查直接发布,消费端在运行期才崩
  • 所有规则一律设为阻断,上游发布被频繁卡住,最终绕开契约流程

数据来源与参考

  • Data Contract 社区规范(datacontract.com)
  • 《Fundamentals of Data Engineering》数据治理章节
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌