1、Schema之痛:混乱的现状与治理的必要性

说实话,我见过太多团队在 Schema 上栽跟头了。

刚入行那几年,我觉得 Schema 不就是个表结构定义嘛,有啥好管的。直到有一次,线上一个字段改名,导致下游十几个数据管道同时报错,整个数仓挂了整整两天。嗯,从那以后,我再也不敢小看 Schema 了。

1.1 混乱的现状:你大概率也遇到过

先说说我看到的典型乱象。你想想看,一个中型公司,数据团队几十号人,每天往 Kafka、Hive、ClickHouse 里写数据。每个人都有自己的命名习惯,每个人都有自己的字段定义方式。结果呢?

  • 同名不同义:两个系统都有 user_id,一个是注册手机号,一个是内部 UID
  • 同义不同名:有的叫 created_at,有的叫 create_time,有的叫 gmt_create
  • 字段类型随意:同一个金额字段,A 系统用 DECIMAL(10,2),B 系统用 STRING,C 系统用 INT
  • 缺少文档:字段含义全靠猜,新人来了至少懵两周

核心痛点:没有统一的 Schema 管理,数据就是一团乱麻。你永远不知道一个字段改了会影响到谁。

我在一个电商项目里遇到过更夸张的。订单表里有个 status 字段,业务方说 0 代表「待支付」,1 代表「已支付」。结果过了半年,新来的开发把 0 改成了「已取消」,1 改成了「待支付」。下游报表全错了,财务对账对了一周。

1.2 为什么 Schema 会失控?

原因其实不复杂。我总结了几点:

  1. 缺乏统一规范:没有命名规则、类型约束、版本管理
  2. 沟通成本高:数据生产者和消费者之间没有契约
  3. 变更不可控:改字段就像改代码,但没有 Code Review
  4. 工具缺失:全靠人工维护,Excel 里记着字段说明

说白了,就是大家各干各的,没人愿意多管闲事。但等到出问题的时候,谁都跑不掉。

1.3 Schema 治理到底治什么?

我个人习惯把 Schema 治理分成三个层面:

层面 内容 典型问题
命名规范 字段名、表名、枚举值的统一规则 大小写混用、下划线/驼峰不统一
类型约束 字段类型、精度、默认值的标准化 金额用 STRING、时间用 INT
版本管理 Schema 变更的追踪、兼容性检查 删字段导致下游报错

你看,这三个层面环环相扣。命名规范是基础,类型约束是保障,版本管理是兜底。缺一个都不行。

1.4 治理的必要性:不做会怎样?

我直接说结论:不做 Schema 治理,数据质量就是空中楼阁。

  • 开发效率低:每次对接新数据源都要花大量时间理解字段含义
  • 数据质量差:字段类型不匹配、枚举值不一致,ETL 天天报错
  • 运维成本高:线上问题排查困难,改个字段要通知所有人
  • 业务信任度低:报表数据对不上,业务方不敢用

注意:我曾经见过一个团队,因为 Schema 混乱,导致数据仓库重建了三次。每次都是因为字段定义不一致,数据对不上。最后老板拍桌子说「再搞不定就换人」。

所以,治理不是锦上添花,而是雪中送炭。你越早开始,后面越省心。

1.5 治理的核心思路

我个人觉得,Schema 治理的核心就四个字:约定大于配置。

什么意思呢?就是先定好规则,然后所有人都按规则来。规则要简单、明确、可执行。比如:

  • 所有时间字段统一用 yyyy-MM-dd HH:mm:ss 格式
  • 所有金额字段统一用 DECIMAL(18,2)
  • 所有枚举值必须定义在统一的枚举表中

规则定好了,剩下的就是工具和流程的问题。后面几章我会详细讲怎么落地。

1.6 一张图看懂 Schema 治理

下面这张图是我自己画的,把 Schema 治理的核心逻辑串起来了:

Schema 治理核心逻辑 混乱现状 治理手段 治理目标 同名不同义 同义不同名 类型不统一 缺少文档 命名规范 类型约束 版本管理 工具支撑 开发效率提升 数据质量保障 运维成本降低 业务信任度提升 核心思路:约定大于配置 先定规则,再上工具,最后靠流程保障

我的建议:别想着一步到位。先从命名规范开始,把最乱的那部分理清楚。等大家尝到甜头了,再推类型约束和版本管理。步子迈太大,容易扯着蛋。

好了,这一章就聊到这儿。记住一句话:混乱是常态,但治理是选择。你选不选?