键映射表是什么
键映射表把来源系统的自然键翻译成维表代理键,并把翻译结果连同生效区间一起存下来。它是「业务键会变、代理键不能乱动」这对矛盾之间的缓冲层:源系统换号、合并、拆分时只改映射关系,事实表里已经落好的 sk 不动,避免为了几个键重刷历史。
基本信息
| 核心结构 | source_sys + natural_key → sk |
|---|---|
| 区间列 | start_date / end_date |
| 唯一键 | source_sys + natural_key + start_date |
| 存放位置 | 与主维同库,随维表加载同步更新 |
| 下游用法 | 事实解析统一走映射,不直连维表 |
典型使用场景
- 事实表落地时把自然键翻译成 sk,避免与维表加载互相等待
- 同一客户在多个业务系统有编号,在映射表内完成跨源合并
- 自然键因业务规则变更需要重分配时,只更新映射不改事实
- 历史事实按「当时有效的键」回溯查询
- 合并两个维表或拆分一个维表时保留旧键到新键的追溯链
建映射表与解析
建映射表与解析
CREATE TABLE dim_customer_keymap (
source_sys string COMMENT '来源系统标识',
natural_key string COMMENT '源系统内的客户编号',
customer_sk bigint COMMENT '统一后的代理键',
start_date date, end_date date
) STORED AS ORC;
-- 事实解析:按来源系统加自然键取当时生效的 sk
SELECT f.order_id, m.customer_sk
FROM ods_order f JOIN dim_customer_keymap m
ON m.source_sys = 'CRM' AND m.natural_key = f.crm_cust_no
AND f.dt >= m.start_date AND f.dt < m.end_date;逐列读法
| 列 | 含义 | 异常表现 |
|---|---|---|
| source_sys | 定义键的命名空间 | 为空时不同系统编号直接撞键 |
| natural_key | 源系统内的稳定编号 | 复用旧编号会导致历史关联漂移 |
| customer_sk | 合并后的统一代理键 | 同一自然键对应多个 sk 说明重复分配 |
| start_date | 该映射的生效起点 | 区间重叠会让一条事实匹配到多行 |
跨源实体合并(同一客户在 CRM 与商城两套编号)在映射表内完成,主维只保留合并后的结果。映射表的巡检项是:同一 source_sys 下区间不重叠、同一自然键任一日期只命中一行,出现重叠或空洞要阻断当日加载。
映射表要保留的历史比主维更长:主维按类型 2 存的是属性版本,映射表还要记录已合并、已废弃的旧编号,否则拿半年前的自然键回查历史事实会一行都匹配不到。