首页/数据/数仓建模速查/维度与事实的加载顺序
维度与事实设计149 条

维度与事实的加载顺序

同一调度内先加载维度、后加载事实,保证事实能解析到对应版本代理键;补数与回刷同样遵循先维后事。

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

加载顺序是什么

维度与事实的加载顺序指同一调度批次内必须先加载维度、再加载事实,保证事实能解析到对应的版本代理键;补数与回刷同样遵循先维后事。顺序颠倒的后果是事实大量落到未知成员键,等到回刷时才发现,而回刷又要改写历史分区,成本比一开始排对顺序高出几个数量级。分层上体现为 ods 到 dim,再到 dwd 事实,最后 dws 汇总。

基本信息

标准顺序ods 同步 → dim 合并 → dwd 事实 → dws 汇总
补数顺序先确认维度已含目标时间的版本,再重跑事实
失败处理维度作业失败时阻断下游事实作业,不要放行
检查手段未知成员占比与零当前行校验放在事实加载之前
跨任务依赖用调度依赖而非时间先后隐含保证

典型使用场景

  • 日常调度:批次开始时先跑维度合并,再跑事实解析代理键
  • 补数排期:重跑某天事实前,先确认该天的维度版本已生成
  • 迟到维度兜底:维度确实到不了时先落未知成员键,维度到位后回刷
  • 故障恢复:上游主数据断供时阻断下游,避免大面积未知成员
  • 跨团队协作:外部团队负责的维度表要显式声明依赖,不靠时间猜
  • 回刷联动:维度回刷后必须连带重跑受影响的事实分区

调度顺序

调度顺序
1. ods_customer      同步上游主数据
2. dim_customer      合并生成新版本(含当前行唯一性校验)
3. 校验             未知成员占比、零当前行检查
4. dwd_order         解析 customer_sk,关联当前版本
5. dws_*             按维度汇总

补数:先确认 dim_customer 已覆盖目标业务日期的版本,再重跑 dwd_order 对应分区

顺序与后果

情况表现处理
维度先、事实后正常,代理键解析成功标准排法
事实先、维度后事实大量落未知成员键需回刷历史分区,成本高
维度作业失败仍放行下游未知成员占比骤升应阻断下游并告警
补数只重跑事实目标时间版本不存在,仍然落未知成员补数脚本必须包含维度步骤
维度回刷后不重跑事实事实指向旧代理键,属性与事实不匹配维度回刷后联动重跑事实
不要靠「上游通常半小时能跑完」这类时间经验来隐含保证顺序,必须写成显式的调度依赖。跨团队场景尤其如此:对方作业时间调整一次,就会造成一整批事实落在未知成员键上,而回刷影响的可能是几百个历史分区。

易错点

  • 事实先跑:代理键解析不到新版本,大量行落到未知成员键,需回刷历史分区
  • 补数只重跑事实:目标时间的维度版本还没生成,补完依旧挂未知成员
  • 靠时间先后而非调度依赖:上游延迟一次就产生整批错误数据
  • 维度作业失败仍放行下游:未知成员占比骤升且无告警,直到业务对账才发现
  • 维度回刷后不联动重跑事实:事实指向已废弃的旧代理键,属性与业务事实不匹配

数据来源与参考

  • 数仓调度实践:维先事后装载顺序
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌