1. Schema治理概述
聊Schema治理之前,我先问个问题:你手头的数据表,是不是已经多到连自己都记不清了?
我在很多公司都见过这种情况。业务跑了两三年,数据仓库里躺着几千张表。没人知道哪些表还在用,哪些字段已经废弃。存储成本蹭蹭往上涨,但谁也不敢删——怕删错了出事故。
这就是Schema治理要解决的核心问题。
1.1 什么是Schema
Schema,说白了就是数据的「骨架」。
一张表有哪些字段,每个字段是什么类型,字段之间有什么关系——这些定义加在一起,就是Schema。比如:
CREATE TABLE user_orders (
order_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
amount DECIMAL(10,2),
created_at TIMESTAMP NOT NULL,
status VARCHAR(20) DEFAULT 'pending'
);
这个建表语句,就是一张表的Schema定义。它告诉存储系统:数据长什么样,该怎么存。
但Schema不止是表结构。在更广的视角下,它还包括:
- 命名规范:表名、字段名怎么起
- 数据类型:用什么类型存什么数据
- 约束条件:非空、唯一、外键等
- 元数据:谁创建的、什么时候建的、用来干什么
1.2 Schema治理的目标与价值
Schema治理不是搞形式主义。它有实实在在的目标。
| 目标 | 说明 | 价值体现 |
|---|---|---|
| 标准化 | 统一命名、类型、约束规范 | 降低理解成本,新人上手快 |
| 可发现 | Schema可检索、可理解 | 减少重复建表,提升复用率 |
| 可管控 | 变更可追溯、可回滚 | 降低生产事故风险 |
| 成本可控 | 识别无用字段、冗余表 | 直接降低存储成本 |
我举个例子。之前帮一家电商公司做治理,发现一张订单明细表里有个字段叫 temp_flag,占了几百GB空间。查了一圈,没人知道这个字段是干嘛的。最后确认是三年前一个临时需求加的,早该删了。
这就是治理的价值——把看不见的浪费找出来。
1.3 Schema治理的挑战
理想很丰满,现实很骨感。我在项目中遇到的挑战,大致分这几类:
1.3.1 历史债务太重
很多公司早期为了快速上线,Schema设计基本靠「拍脑袋」。字段名用拼音缩写,类型随便选,注释能省则省。等业务稳定了想治理,发现已经积重难返。
我曾经接手过一个项目,光 status 字段就有7种不同的命名方式:status、state、flag、is_active……每个含义还不一样。改起来牵一发动全身。
1.3.2 业务变化太快
互联网业务,需求三天一变。今天加个字段,明天改个类型。Schema治理要求「稳」,业务要求「快」——这两者天然矛盾。
我记得有一次,业务方要求当天上线一个新字段。按治理流程,需要评审、测试、审批。结果业务等不及,直接绕开流程改了生产库。嗯,后来那个字段类型选错了,回滚花了两天。
1.3.3 缺乏工具支撑
很多团队还在用Excel管理Schema。几百张表的字段定义,全靠人工维护。版本对不上、更新不及时,是家常便饭。
没有自动化工具,治理就是纸上谈兵。
1.3.4 组织协同困难
数据团队、业务团队、运维团队,各有各的诉求。数据团队想规范,业务团队想灵活,运维团队想稳定。三方博弈,谁都不让步。
1.4 Schema治理的核心框架
说了这么多,我把Schema治理的整体逻辑画成一张图,方便你理解。
这张图把Schema治理拆成了四个层次。从上到下,从目标到落地。你想想看,很多团队治理失败,就是因为只盯着中间某一层,没形成闭环。
我个人习惯,做治理之前先画这样一张图。把目标、挑战、手段、价值串起来,团队对齐了再动手。方向对了,后面的事才好办。