首页/数据/数仓建模速查/递归 CTE 构建维度层级
维度与事实设计149 条

递归 CTE 构建维度层级

自引用层级(组织/类目/账户)用递归 CTE 从根展开到叶,适合中小规模层级;结果常用于生成路径列或校验孤儿节点。

数仓建模速查数据更新于 2026-10-12
引擎PostgreSQL/Hive/Spark 均支持 WITH RECURSIVE
用途展开层级、找根、找环
注意深度与环保护

展开组织树

展开组织树
WITH RECURSIVE tree AS (
  SELECT org_id, parent_id, 1 AS lvl, CAST(org_id AS string) AS path
  FROM dim_org WHERE parent_id IS NULL
  UNION ALL
  SELECT o.org_id, o.parent_id, t.lvl + 1, concat(t.path, '/', o.org_id)
  FROM dim_org o JOIN tree t ON o.parent_id = t.org_id
)
SELECT * FROM tree;
层级规模大时物化路径列或闭包表,避免每次查询都递归。

易错点

  • 无环路检测,脏数据导致递归死循环
  • 每次查询现场递归,大层级性能不可接受

数据来源与参考

  • PostgreSQL 文档:WITH RECURSIVE;Spark SQL 参考
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌