未知成员是什么
维度表通常会预置一条或若干条特殊成员行,用来承载事实加载时匹配不到维度的情况:常见取值是代理键 -1、名称 UNKNOWN 或 INVALID。它的作用有两个:一是保证事实不因维度缺失而被丢弃,金额与数量仍能进入汇总;二是让异常集中在明确的键上便于回查。这条默认行是兜底机制而不是垃圾桶,数量持续增长说明上游质量在恶化,需要报警。
基本信息
| 默认行取值 | 代理键 -1 或 0,名称 UNKNOWN/INVALID |
|---|---|
| 建立时机 | 维表初始化或首次加载前 |
| 收益 | 事实不因维度缺失丢失,异常可追查 |
| 监控 | 落默认键的行数与占比需纳入质量看板 |
典型使用场景
- 维度加载晚于事实:新商品当天未进维表,订单先落默认键再回补
- 源系统存在脏编码:上游传了未登记的渠道码,事实不因此整批失败
- 跨系统编码不一致:主数据尚未打通期间,默认键让汇总仍可运行
- 质量监控:默认键占比是上游数据质量最直观的观测指标
- 报表标注:分析时应把 UNKNOWN 单列或排除,避免污染业务结论
默认行实现
默认行实现
-- 维表预置默认行,代理键取 -1 便于一眼识别
INSERT INTO dim_user (user_sk, user_id, user_name, is_current)
VALUES (-1, '-1', 'UNKNOWN', 1); -- 与其他业务键不冲突
-- 加载事实时匹配失败落默认键,并写入异常表备查
-- INSERT INTO fact_order (user_sk) ... SELECT coalesce(d.user_sk, -1)
-- LEFT JOIN dim_user d ON s.user_id = d.user_id AND d.is_current = 1
-- 巡检默认键占比
SELECT count(1) AS unknown_cnt FROM fact_order WHERE user_sk = -1;常见默认成员
| 成员 | 典型键值 | 适用情况 |
|---|---|---|
| UNKNOWN | -1 | 来源未提供该属性,确实未知 |
| INVALID | -2 | 提供了非法值,如负数订单号 |
| NOT APPLICABLE | -3 | 属性对该行不适用,如无门店的线上单 |
| 历史缺失 | -4 | 属于较老版本但维度已不再保留 |
默认键必须有监控阈值:占比从千分之一涨到百分之五,说明上游同步链路出了问题,而不是数据正常波动。
默认行不能参与业务分析。如果把 UNKNOWN 混进渠道排名或用户分层,指标会被这条虚拟成员扭曲,且因为数量不大而极难被发现。