首页/数据/数仓建模速查/维度变更审计与回溯
维度与事实设计149 条

维度变更审计与回溯

维度表保留审计列(load_batch、load_ts、src_sys、change_reason)并配套变更日志表,任何版本变化都能回答「谁、何时、为何、从何而来」。

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

审计能力从哪来

慢变维度的审计靠两部分:维表内的审计列记录这一版本是哪个加载批次、什么时间、从哪个系统写进来的;独立的变更日志表记录哪个属性从什么值变成了什么值。只有当前快照的维度无法回答历史问题,报表口径出现争议时拿不出证据,质量问题排查只能靠猜。审计数据要按保留期规划时间分区,敏感属性的旧值还要做掩码,否则审计表本身会成为新的合规风险点。

基本信息

表内审计列load_batch、load_ts、src_sys、change_reason
变更日志按属性记录新旧值与发生时间
保留策略按审计保留期做时间分区
脱敏要求手机号、证件号等旧值需掩码存储

典型使用场景

  • 客户等级调整后历史报表口径变化,需要查清是哪一批、哪天改的
  • 内审或监管要求说明数据来源与加工过程
  • 质量问题定位:确认某属性在特定日期是否已经正确入库
  • 反查异常批量变更:某日新增版本数远超日常水平
  • 新同事接手模型时,用审计列与变更日志快速理解属性的加工历史

变更日志建表

变更日志建表
-- 一个属性变化一行,便于按属性追溯
CREATE TABLE dim_customer_changelog (
  customer_id  string    COMMENT '业务主键',
  changed_col  string    COMMENT '变更属性名',
  old_value    string    COMMENT '变更前值',
  new_value    string    COMMENT '变更后值',
  changed_at   timestamp COMMENT '变更发生时间',
  batch_id     string    COMMENT '加载批次'
) PARTITIONED BY (dt string) STORED AS ORC;

审计列读法

列名含义异常表现
load_batch写入该版本的加载批次批次重复说明任务重跑且未做幂等
load_ts该版本的入库时间晚于业务生效时间说明链路延迟
src_sys属性来源系统空值则无法判断口径来源
change_reason变更原因标注长期为空说明审计只剩形式
审计列描述的是入库事实,不应被回刷覆盖:重跑任务时按批次覆盖对应分区,而不是整表重写时间列,否则「首次入库时间」会随重跑漂移。
审计与存储要权衡:审计列会加宽维度行,变更日志则随变更次数线性增长。常见做法是审计列常驻主表,变更日志只覆盖需要追溯的属性集合,并按保留期滚动清理分区。

易错点

  • 审计列与实际变更不一致,事故复盘只能靠猜
  • 变更日志记明文敏感属性旧值,脱敏要求无法通过
  • 日志表无时间分区,保留期到了只能整表删除
  • 只有变更日志没有批次号,变更关联不到具体任务实例

数据来源与参考

  • 数据仓库实践:审计与可追溯
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌