首页/数据/数仓建模速查/迷你维度(Mini-dimension)
维度与事实设计149 条

迷你维度(Mini-dimension)

把等级、年龄段等高频变化的离散属性拆成小维表,事实表同时挂基础维键与迷你维键,控制主维表行数增长。

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

迷你维度是什么

迷你维度把等级、年龄段这类变化频繁但取值离散的属性从主维表里拆出来,单独建成一张成员数很少的小维表。事实表同时挂基础维键与迷你维键,统计时会话或订单发生时的属性值由迷你维键决定,主维表则只保留变化缓慢的属性。这样主维表的行数增长被显著抑制,代价是查询要多关联一张小表,且新增组合需要同步到事实加载逻辑。

基本信息

使用动机主维变化慢、属性列不宜频繁新增或变更
结构离散属性组合枚举而成的小维表
事实表同时存基础维键与迷你维键两个外键
枚举量估算各属性取值个数相乘,先算再建
代价查询多关联一张小表,加载需处理组合缺失

典型使用场景

  • 用户等级与年龄段:两个属性变化频繁,放进主维会让维表版本数暴涨
  • 客户信用分层:分层规则每季度调整,拆成迷你维后调整只影响小表
  • 商品热度分级:按销量分档的标签频繁变化,适合独立枚举
  • 会话质量分档:流量域按停留时长分档,随会话确定后不再变化
  • 主维瘦身:把宽表中会频繁变化的列迁出,控制版本行增长速度

迷你维度使用

迷你维度使用
-- 主维只保留变化缓慢的属性,迷你维存离散组合
-- dim_user(user_sk, user_id, user_name, city_code, ...)
-- dim_user_mini(mini_sk, tier_band, age_band, activity_level)
SELECT f.order_id,
       d.user_name,          -- 基础维度:姓名等慢变属性
       m.tier_band,          -- 迷你维度:下单时的等级分档
       m.age_band,           -- 迷你维度:年龄段分档
       f.item_amt
FROM fact_order f
JOIN dim_user      d ON f.user_sk      = d.user_sk
JOIN dim_user_mini m ON f.user_mini_sk = m.mini_sk;
-- 迷你维成员数 = 各属性取值数相乘,估算后再决定是否采用

迷你维与主维分工

属性放置位置原因
姓名、注册手机主维变化少,需要历史追溯
等级分档迷你维变化频繁、取值离散
年龄段迷你维随会话或订单时点固化
创建渠道主维一次确定后不再变化
活动标签评估后拆出变化极快时迷你维也会膨胀
属性组合枚举爆炸时,迷你维度会退化得比主维更大。三个属性各十种取值就是一千行,四个属性就是上万行,因此必须先估算枚举量再决定拆分。
事实加载时如果出现迷你维里不存在的组合,应补建组合而不是丢弃事实,否则会有一批行静默缺失。

易错点

  • 枚举组合估算不足:迷你维反成最大的维表,查询与维护成本一起上升
  • 新组合未同步到事实加载逻辑:事实匹配不到迷你维键,行被丢弃或落默认键
  • 把慢变属性也塞进迷你维:主维失去历史追溯能力,得不偿失
  • 迷你维规则调整未回刷历史:同一历史时点的分档结果前后不一致

数据来源与参考

  • 数据仓库工具箱:迷你维度
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌