模型版本与变更记录
模型版本与变更记录指每次模型变更都要留档:变更类型(加列、改语义、改粒度)、影响范围、生效时间、负责人与回滚方式,并与代码库同源管理。加列通常是向后兼容的,改语义与改粒度则可能让历史数据与新数据口径不一致,必须显式标注生效边界。保留旧版本路径,才有回滚的可能。
基本信息
| 记录载体 | 变更日志表 + 模型定义文件 |
|---|---|
| 变更类型 | 加列、改语义、改粒度、加表、下线 |
| 必填字段 | 变更类型、明细、生效时间、负责人、回滚方式 |
| 同源管理 | 模型定义与建表语句随代码库版本控制 |
| 配套 | 与数据血缘联动,快速定位受影响下游 |
典型使用场景
- 加列上线:记录新增字段的生效日期与默认值,下游按需接入
- 语义变更:把「支付金额」改为含优惠前金额时,标注生效边界并通知下游
- 粒度变更:事实表从订单粒度改为订单商品行粒度,属于高影响变更
- 问题定位:指标异常时先查变更日志,确认近期是否有相关模型改动
- 回滚演练:保留旧版本定义与旧表路径,验证可回滚
- 审计应对:被问某个字段的历史定义时,能从日志还原当时的语义
变更日志表
变更日志表
-- model_change_log 记录每次模型变更
-- (change_id, table_name, change_type, detail,
-- effective_dt, owner, rollback_plan, ticket_id)
INSERT INTO model_change_log VALUES
('C20261013-01', 'fact_order', 'add_column',
'新增 discount_amt decimal(18,2),默认 0,历史分区不回溯',
'2026-10-14', 'zhangsan', 'DROP COLUMN 或按旧版本重建', 'REQ-1024');
-- 按生效日期查询某张表的变更历史
SELECT change_id, change_type, detail, effective_dt, owner
FROM model_change_log
WHERE table_name = 'fact_order'
ORDER BY effective_dt;变更类型与风险
| 类型 | 兼容性 | 必须做的事 |
|---|---|---|
| 加列 | 向后兼容 | 给默认值、标注生效日期、通知下游 |
| 改语义 | 不兼容 | 标注生效边界,历史区间需重算或明确标注新旧 |
| 改粒度 | 不兼容 | 属重建级变更,需新表与并行期 |
| 加表 | 兼容 | 登记血缘与负责人 |
| 下线 | 不兼容 | 提前公告、确认无引用、保留恢复路径 |
改语义是变更中最容易被低估的一类:表结构没变、字段名没变,但含义变了,下游报表会静默错下去。这类变更必须标注生效日期,并明确历史数据是否重算;如果历史不重算,报表在生效日前后会出现口径断点,需要在使用说明里写清。