首页/数据/数仓建模速查/模型版本与变更记录
建模基础69 条

模型版本与变更记录

模型变更记录包含:变更类型(加列/改语义/改粒度)、影响范围、生效时间、回滚方式;与代码库同源管理。

数仓建模速查数据更新于 2026-10-13

模型版本与变更记录

模型版本与变更记录指每次模型变更都要留档:变更类型(加列、改语义、改粒度)、影响范围、生效时间、负责人与回滚方式,并与代码库同源管理。加列通常是向后兼容的,改语义与改粒度则可能让历史数据与新数据口径不一致,必须显式标注生效边界。保留旧版本路径,才有回滚的可能。

基本信息

记录载体变更日志表 + 模型定义文件
变更类型加列、改语义、改粒度、加表、下线
必填字段变更类型、明细、生效时间、负责人、回滚方式
同源管理模型定义与建表语句随代码库版本控制
配套与数据血缘联动,快速定位受影响下游

典型使用场景

  • 加列上线:记录新增字段的生效日期与默认值,下游按需接入
  • 语义变更:把「支付金额」改为含优惠前金额时,标注生效边界并通知下游
  • 粒度变更:事实表从订单粒度改为订单商品行粒度,属于高影响变更
  • 问题定位:指标异常时先查变更日志,确认近期是否有相关模型改动
  • 回滚演练:保留旧版本定义与旧表路径,验证可回滚
  • 审计应对:被问某个字段的历史定义时,能从日志还原当时的语义

变更日志表

变更日志表
-- 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;

变更类型与风险

类型兼容性必须做的事
加列向后兼容给默认值、标注生效日期、通知下游
改语义不兼容标注生效边界,历史区间需重算或明确标注新旧
改粒度不兼容属重建级变更,需新表与并行期
加表兼容登记血缘与负责人
下线不兼容提前公告、确认无引用、保留恢复路径
改语义是变更中最容易被低估的一类:表结构没变、字段名没变,但含义变了,下游报表会静默错下去。这类变更必须标注生效日期,并明确历史数据是否重算;如果历史不重算,报表在生效日前后会出现口径断点,需要在使用说明里写清。

易错点

  • 变更靠口头通知:事后无人可查,问题定位只能靠猜
  • 改语义不留记录:表结构与字段名都没变,下游报表静默出错
  • 改粒度不建新表:在旧表上直接改,导致历史数据与新数据无法区分
  • 不留旧版本路径:出问题想回滚时发现旧定义与旧表都已不在
  • 变更日志与血缘脱节:判不清影响范围,通知遗漏关键下游

数据来源与参考

  • 数仓治理实践:变更管理
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌