核心问题

分析型数仓的数据模型不能只看“表是否已经建出来”,更要看模型是否真正沉淀为公共资产。

一个好的数仓模型,应该满足三件事:

  • 完善度:公共明细层、汇总层、应用层是否建设充分,是否减少了对原始层的直接依赖。
  • 复用度:DWD、DWS、DIM 等公共模型是否被多个下游场景复用。
  • 规范度:模型是否符合分层、命名、主题域、元数据、质量规则和生命周期规范。

Summary

好模型不是表越多越好,而是让业务需求尽量从 DWS、ADS、DM 或指标层取数,让 DWD/DIM 成为稳定公共资产,让 ODS 保持贴源输入角色。

分层理想路径

flowchart TD
    A["源系统 / 日志 / 外部数据"] --> B["ODS 贴源层"]
    B --> C["DWD 明细事实层"]
    B --> D["DIM 公共维度层"]
    C --> E["DWS 公共汇总层"]
    D --> E
    E --> F["ADS / DM 应用层"]
    F --> G["报表 / BI / Ad-hoc / 指标服务"]

    B -.异常跨层引用.-> E
    B -.异常跨层引用.-> F
    C -.明细直接查询过多.-> G

理想链路是:

ODS -> DWD/DIM -> DWS -> ADS/DM -> 应用

需要治理的链路是:

ODS -> DWS
ODS -> ADS/DM
ODS -> 报表/临时查询
DWD -> 大量重复宽表

评价总框架

可以将模型健康度抽象为一个加权评分:

模型健康度 = 完善度得分 * 40% + 复用度得分 * 35% + 规范度得分 * 25%
一级指标关注问题核心指标健康方向
完善度公共层有没有建好跨层引用率、ODS 查询率、汇总查询比例、公共维度覆盖率、指标沉淀率跨层低,汇总高
复用度模型有没有被共享DWD 引用系数、DWS 引用系数、DIM 引用系数、公共模型复用率引用高,僵尸少
规范度模型能不能治理分层识别率、主题域归属率、命名规范率、元数据完整率、质量规则覆盖率识别高,标准高

完善度

完善度衡量数仓分层是否真正发挥作用,尤其要观察 ODS 是否被大量直接消费。

指标计算公式说明方向
跨层引用率跨层引用次数 / 总引用次数下游是否跳过中间公共层直接引用底层数据越低越好
ODS 直接任务读取率读取 ODS 的任务数 / 已识别分层读表任务数调度任务是否大量绕过 DWD/DWS越低越好
ODS 直接查询率查询 ODS 的次数 / 总查询次数分析查询是否依赖原始层越低越好
汇总数据查询比例查询 DWS、ADS、DM 的次数 / 总查询次数汇总层、应用层是否承接主要查询越高越好
公共维度覆盖率引用公共 DIM 的事实/汇总模型数 / 应引用 DIM 的模型数是否使用一致维度越高越好
指标沉淀率已沉淀指标数 / 常用指标总数指标是否从报表 SQL 中公共化越高越好

跨层引用率

跨层引用率用来识别分层失效。

ODS 跨层引用率 =
ODS 直接被 DWS/ADS/DM 引用的活跃表数 / ODS 活跃表数

也可以按引用次数计算:

跨层引用率 =
异常跨层引用次数 / 全部引用次数

常见异常包括:

  • DWS 直接引用 ODS。
  • ADS/DM 直接引用 ODS。
  • ADS/DM 大量直接引用 DWD 明细,绕过 DWS 公共汇总。
  • 应用报表直接查询 ODS。

汇总数据查询比例

汇总数据查询比例用来判断 DWS/ADS/DM 是否承接了主要分析流量。

汇总数据查询比例 =
查询 DWS/ADS/DM 的次数 / 总查询次数

更推荐使用扫描量口径:

汇总数据扫描比例 =
DWS/ADS/DM 查询扫描数据量 / 总查询扫描数据量

扫描量比查询次数更能反映真实成本。

复用度

复用度衡量公共模型是否真的被使用。如果每个需求都新建链路,模型就没有沉淀为资产。

指标计算公式说明方向
DWD 引用系数DWD 被 DWS/ADS/DM 引用次数 / DWD 模型数明细事实层是否被复用越高越好
DWS 引用系数DWS 被 ADS/DM/报表引用次数 / DWS 模型数公共汇总层是否被复用越高越好
DIM 引用系数DIM 被事实/汇总/应用表引用次数 / DIM 模型数公共维度是否统一越高越好
公共模型复用率被 2 个及以上下游引用的公共模型数 / 公共模型总数是否形成共享资产越高越好
有效模型占比近 N 天被查询或被依赖的模型数 / 模型总数是否存在大量无人使用模型越高越好
僵尸模型率近 N 天无查询且无下游依赖的模型数 / 模型总数无效资产占比越低越好

模型引用系数可以作为核心复用指标:

模型引用系数 = 下游引用次数 / 模型数量

经验判断:

模型引用系数评价
< 1大量模型无人使用
1 - 2复用偏弱
2 - 3基本可接受
>= 3复用较好
> 5高复用公共资产

低复用与高复用形态

flowchart LR
    subgraph Bad["低复用:烟囱式链路"]
        A1["ODS_A"] --> B1["DWD_A"] --> C1["ADS_A"]
        A2["ODS_B"] --> B2["DWD_B"] --> C2["ADS_B"]
        A3["ODS_C"] --> B3["DWD_C"] --> C3["ADS_C"]
    end

    subgraph Good["高复用:公共层发散"]
        O1["ODS 订单"] --> D1["DWD 交易明细"]
        O2["ODS 支付"] --> D1
        D1 --> S1["DWS 用户交易汇总"]
        D1 --> S2["DWS 商品销售汇总"]
        D1 --> S3["DWS 渠道转化汇总"]
        S1 --> M1["ADS 经营看板"]
        S2 --> M1
        S3 --> M2["ADS 增长分析"]
    end

规范度

规范度衡量模型是否可维护、可治理、可自动化运营。

指标计算公式说明方向
分层识别率已识别分层表数 / 总表数是否能识别 ODS/DWD/DIM/DWS/ADS/DM越高越好
主题域归属率已归属主题域表数 / 总表数是否归入交易、用户、商品等主题域越高越好
命名规范率符合命名规范的表/字段数 / 总表/字段数是否能从名称识别层级、主题、周期越高越好
字段标准化率匹配字段字典的字段数 / 字段总数同义字段是否统一越高越好
元数据完整率关键元数据完整的模型数 / 模型总数是否有负责人、粒度、生命周期等越高越好
质量规则覆盖率配置质量规则的核心模型数 / 核心模型总数是否可验证越高越好
调度依赖完整率配置上游依赖的任务数 / 应配置依赖任务数是否避免空跑、错跑、乱序产出越高越好

建议至少要求核心模型具备:

  • 表中文名、字段中文名、字段描述。
  • 负责人、主题域、业务过程。
  • 数据粒度、主键或唯一键。
  • 更新频率、生命周期、分区策略。
  • 上游来源、下游去向。
  • 数据质量规则。

元数据支撑

这些指标不能靠人工判断,需要元数据中心提供数据支撑。

表资产元数据

字段示例说明
table_idt_1001表唯一 ID
table_namedwd_trade_order_detail_di表名
layerDWD分层
subject_areatrade主题域
business_processorder业务过程
grainone row per order item数据粒度
ownerzhangsan负责人
lifecycle_days1095生命周期
is_active1是否活跃
created_at2026-01-01创建时间

血缘依赖元数据

字段示例说明
upstream_tableods_trade_order_df上游表
upstream_layerODS上游层级
downstream_tableads_trade_dashboard_di下游表
downstream_layerADS下游层级
relation_typeread_to_build依赖类型
job_idjob_2001任务 ID
stat_date2026-05-17统计日期

查询日志元数据

字段示例说明
query_idq_9001查询 ID
user_idanalyst_01查询用户
table_namedws_trade_user_1d命中表
layerDWS命中层级
scan_bytes120GB扫描量
duration_seconds35查询耗时
query_typead_hoc查询类型
stat_date2026-05-17统计日期

数据质量元数据

字段示例说明
table_namedwd_trade_order_detail_di表名
rule_typeprimary_key_unique规则类型
rule_exprorder_id,item_id unique规则表达式
enabled1是否启用
last_statuspass最近执行结果
ownerzhangsan负责人

指标计算 SQL

ODS 跨层引用率

select
  count(distinct case
    when upstream_layer = 'ODS'
     and downstream_layer in ('DWS', 'ADS', 'DM')
    then upstream_table end
  ) * 1.0
  / count(distinct case when upstream_layer = 'ODS' then upstream_table end)
    as ods_cross_layer_ref_rate
from lineage_edges
where stat_date between '${start_date}' and '${end_date}';

汇总数据查询比例

select
  count(case when layer in ('DWS', 'ADS', 'DM') then 1 end) * 1.0
  / count(*) as summary_query_rate
from query_log
where stat_date between '${start_date}' and '${end_date}';

DWD 模型引用系数

select
  count(*) * 1.0 / count(distinct upstream_table) as dwd_ref_coefficient
from lineage_edges
where upstream_layer = 'DWD'
  and downstream_layer in ('DWS', 'ADS', 'DM')
  and stat_date between '${start_date}' and '${end_date}';

分层识别率

select
  count(case when layer is not null and layer <> 'UNKNOWN' then 1 end) * 1.0
  / count(*) as layer_identify_rate
from table_metadata
where is_active = 1;

治理闭环

flowchart TD
    A["采集元数据"] --> B["识别模型分层 / 主题域 / 负责人"]
    B --> C["解析血缘、任务依赖、查询日志"]
    C --> D["计算完善度、复用度、规范度"]
    D --> E["识别问题模型"]
    E --> F["制定治理动作"]

    F --> F1["补齐 DWD 明细模型"]
    F --> F2["沉淀 DWS/ADS 汇总模型"]
    F --> F3["统一 DIM 一致维度"]
    F --> F4["规范命名与字段字典"]
    F --> F5["迁移报表和 Ad-hoc 查询"]
    F --> F6["下线重复或无人使用模型"]

    F1 --> G["重新计算指标"]
    F2 --> G
    F3 --> G
    F4 --> G
    F5 --> G
    F6 --> G
    G --> D

治理动作清单

问题现象可能原因治理动作
ODS 直接查询率高DWD/DWS 没有覆盖常用需求补齐明细事实层和公共汇总层
跨层引用率高分层约束弱,开发绕层取数建立依赖规则和上线检查
DWD 引用系数低明细模型粒度不清或主题不稳定重构核心业务过程模型
DWS 引用系数低汇总模型太贴近单个报表按主题、周期、粒度重建公共汇总
DIM 引用系数低维度口径分散建设一致维度和维度映射规则
元数据完整率低模型资产没有纳管强制表说明、字段说明、负责人、粒度声明
质量规则覆盖率低缺少自动验证机制核心表配置唯一性、非空、波动、枚举、及时性规则
僵尸模型率高历史需求沉淀但未清理建立生命周期和下线机制

最小指标看板

如果只能先做一版治理看板,优先放这 6 个指标:

优先级指标价值
P0跨层引用率判断数仓分层是否失效
P0汇总数据查询比例判断 DWS/ADS/DM 是否承接分析流量
P0DWD/DWS 模型引用系数判断公共模型是否被复用
P1公共维度覆盖率判断一致维度是否建立
P1元数据完整率判断模型是否可治理
P1质量规则覆盖率判断模型是否可信

参考