dbt 模型依赖解析器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/dbt-model-dependency-resolver-2 到你的 AI 助手中。
技能介绍
解决什么问题
在 dbt 项目变大之后,model、source、seed 和各类 test 会逐渐形成一张不容易肉眼看清的 DAG。常见的工程问题包括:模型间接引用同一节点,最后在刷新或 CI 阶段才暴露出循环依赖;某些模型实际已经没有任何下游消费,却仍然参与编译、测试和物化;以及因为 materialized、persist_docs 或增量策略配置不当,导致刷新范围过大、重复计算或 join 成本偏高。
这个技能面向这些“项目已经能跑,但结构未必健康”的场景。它不负责替代 dbt parse 或 dbt build,而是围绕已有 manifest.json 做一轮静态结构审查,把隐藏在 DAG、Jinja 宏和 ref 调用中的依赖关系拉出来检查。
核心能力
- 循环引用识别:从
manifest.json出发重建节点关系,找出那些经过多层ref()最终回到自身或形成环的模型链。 - 孤立模型检查:识别没有下游依赖且可能长期未被业务引用的模型,为后续下线、合并或归档提供候选清单。
- 物化策略审查:检查模型当前采用的物化方式与依赖图是否匹配,提示可能引入重复刷新、过度持久化或 join 放大风险的配置。
- 血缘追踪:结合 Jinja 模板解析处理宏展开、
ref()动态调用和条件分支,尽量还原真实构建前会命中的依赖边。
工作方式
- 读取 dbt 项目编译产出的
manifest.json,提取nodes、sources、exposures和parent_map/child_map等信息。 - 对模型 SQL 与 Jinja 模板做静态解析,识别
ref()、source()、宏调用和常见控制流结构。 - 将解析得到的依赖边合并到 manifest 原有节点关系上,生成更贴近实际渲染结果的项目图。
- 在项目图上运行环检测、孤儿节点统计和物化策略扫描,输出结构化的审查结论。
适用边界
- 结果质量依赖
manifest.json的完整性。如果项目尚未完成解析,或使用了非常特殊的插件、自定义宏,边信息可能不完整。 - Jinja 静态解析不是运行时解释器。完全依赖环境变量、随机值或复杂 Python 扩展生成的
ref(),可能无法被准确预知。 - 扫描结果更适合作为代码审查和重构输入,不应直接当作唯一发布门禁;任何下线或策略调整仍需结合数据重要性、回刷窗口和下游消费方确认。
使用场景
- dbt 项目解析通过但构建偶发卡住,需要分析 manifest.json 找出循环引用链路
- 线上刷新范围异常扩大,要审查模型物化配置是否引发重复刷新
- 模型数量变多后,需要识别没有下游消费的孤立模型并准备下线
- CI 前需要对 dbt DAG 做静态检查,确认 ref 依赖和 Jinja 模板没有形成环
适合人员
- 数据平台工程师,需要在发布前审查 dbt 项目结构和依赖风险
- 数据建模负责人,要在模型扩容后清理孤立表并调整物化策略
- 分析工程师,需要定位刷新失败或 SQL 成本上升背后的依赖问题
- 负责 dbt 治理的工程师,需要把 DAG 健康检查纳入代码评审流程