首页/数据/数仓建模速查/均衡层次与不规则层次
建模基础69 条

均衡层次与不规则层次

均衡层次深度一致(年月日),可直接物化列;不规则层次深度不一(类目深浅不一),需要路径列或桥接表表达。

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

均衡与不规则层次

层次结构按深度是否一致分为两类。均衡层次每一条路径的深度相同,比如年、月、日三级时间层次;这类可以直接物化成固定层级列,查询时按列分组即可。不规则层次深度不一致,比如类目有的到三级有的到五级,用固定层级列会丢节点,需要路径列或桥接表来表达。判断方式不需要争论:先跑一次实际深度分布统计,用数据决定采用哪种表达。

基本信息

均衡层次层级深度一致,可直接物化 l1/l2/l3 列
不规则层次深度不一,需路径列或桥接表表达
判断方式先跑深度分布统计,按实际数据决策
常见场景时间层次属均衡,商品类目与组织多属不规则

典型使用场景

  • 时间维度:年月日深度固定,直接物化列后按层聚合最简单
  • 商品类目:深度因品类而异,用路径列支持任意层级汇总
  • 组织架构:层级随合并拆分变化,需评估是物化还是递归
  • 渠道体系:一级代理到三级代理深度不均,路径表达更稳妥
  • 模型评审:用深度分布数据决定表达方式,避免凭印象下结论

路径列与聚合

路径列与聚合
-- 不规则层次用路径列表达,格式需先定规范
-- path = '1/12/103/1034',斜杠分隔且每层带层级标记
SELECT * FROM dim_cat
WHERE path LIKE '1/12/%';       -- 取某二级下全部子节点

-- 按深度过滤实现任意层级聚合
SELECT c.depth_level, sum(f.amt) AS amt
FROM fact_sale f
JOIN dim_cat c ON f.cat_id = c.cat_id
WHERE c.depth_level <= 2        -- 只聚合前两层,跳级成员需先约定归属
GROUP BY c.depth_level;

-- 深度分布统计(建模前必做)
-- SELECT depth_level, count(1) FROM dim_cat GROUP BY depth_level;

表达方式对照

判断项固定层级列路径列或桥接表
深度一致性所有路径深度相同深度参差不齐
查询便利性按列直接分组,最简需前缀匹配或桥接关联
结构变更深度变化要改表结构与回刷路径重算或桥接重建
存储开销较小路径串较长,桥接表行数放大
用固定层级列硬套不规则树时,超出预设深度的节点会被归入空值或末级,汇总数字看起来正常但层级口径已经错了。
路径串格式必须先定规范:分隔符、是否首尾带分隔符、层级序号如何表达,都要写进文档,否则前缀匹配会出现跨层级误命中。

易错点

  • 用固定层级列硬套不规则树:深节点被丢失或错误归层,汇总失真
  • 路径串格式无规范:前缀匹配把不同分支混在一起,金额偏高
  • 深度列维护滞后于结构调整:层级汇总与明细长期对不上
  • 未做深度分布统计就选方案:上线后才发现深度远超预设,只能重建

数据来源与参考

  • Kimball 方法论:层次建模
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌