特殊成员行的作用
维度表中用固定代理键承载「源系统没有提供」和「业务上不适用」两类情况,避免事实表因为查不到维度成员而丢行或直接失败。常见约定是 -1 表示未知、-2 表示不适用,也有团队用 0 表示未知,选哪一种都能用,难点在于全链路统一。合计行只在少数场景作为预聚合成员存在,物化进维表会让下钻分析与明细对不上。特殊成员的编码、名称与使用规则要写进口径文档并冻结,新增类型需走评审。
基本信息
| -1 | 未知成员:源提供了业务键但维表无对应记录 |
|---|---|
| -2 | 不适用成员:业务上不存在该关系 |
| 0 或 -3 | 部分团队预留,含义须在团队内统一 |
| 合计行 | 多数场景不物化进维表 |
典型使用场景
- 事实加载时外键在维表查不到,落 -1 并计数告警,避免任务直接中断
- 新业务流程上线、维表尚未同步时,用不适用成员保证事实不丢
- 报表需要把「未知归属」单独成行,让缺失可见而不是被合并隐藏
- 与财务对账时区分未知与不适用,两类缺失的追责方向完全不同
- 日常巡检把未匹配行占比作为维表同步链路的健康指标,早于下游报错发现延迟
预置与统计
预置与统计
-- 维表预置特殊成员,代理键一经确定不再变动
INSERT INTO dim_customer (customer_sk, customer_id, customer_name)
VALUES (-1, 'UNKNOWN', '未知'), (-2, 'NA', '不适用');
-- 加载后统计未匹配行,超过阈值即告警
SELECT count(1) AS unmatched_rows
FROM dwd_order o
LEFT JOIN dim_customer c ON o.customer_id = c.customer_id
WHERE o.customer_id IS NOT NULL AND c.customer_sk IS NULL;成员约定
| 成员 | 编码 | 使用规则 |
|---|---|---|
| 未知 | -1 | 有业务键但维表未匹配到,需追查同步延迟 |
| 不适用 | -2 | 业务上不存在该关系,如线下单无线上账号 |
| 合计 | 通常不物化 | 汇总由查询层生成,避免下钻时重复计数 |
用 -1 表示未知、0 表示不适用都可行,关键是同一套数仓里统一;跨表关联时若两套约定混用,会把两类缺失混成一个数。特殊成员还应从客户数、活跃数等业务口径中排除。
特殊成员在维表里通常是一条不参与 SCD 版本管理的占位记录;若维表带生效、失效时间列,它的区间要写成开放区间,否则按时间区间关联时依然查不到,会退回按业务键关联的老问题。