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 会失控?
原因其实不复杂。我总结了几点:
- 缺乏统一规范:没有命名规则、类型约束、版本管理
- 沟通成本高:数据生产者和消费者之间没有契约
- 变更不可控:改字段就像改代码,但没有 Code Review
- 工具缺失:全靠人工维护,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 治理的核心逻辑串起来了:
我的建议:别想着一步到位。先从命名规范开始,把最乱的那部分理清楚。等大家尝到甜头了,再推类型约束和版本管理。步子迈太大,容易扯着蛋。
好了,这一章就聊到这儿。记住一句话:混乱是常态,但治理是选择。你选不选?