章节摘要:本章钻进 dbt 的机器房,回答三个环环相扣的问题:一段带模板语法的 SQL 是如何被编译成纯 SQL 的;几十上百个模型之间的执行顺序是怎么算出来的;同一个模型的逻辑为什么可以落成视图、表、增量表三种完全不同的物理形态。最后用增量模型与快照这对「双子机制」收尾——一个管「新数据怎么进来」,一个管「旧状态怎么留底」。这一章是全册的技术地基,后面所有工程化话题都建立在它的概念之上。
阅读完本章,你应当能够:
本章三个主题构成一条「从代码到数据」的流水线:编译把人写的模板 SQL 变成机器能跑的纯 SQL;DAG 把所有模型的依赖关系变成一张可排序、可并行的执行计划;物化决定每个模型在仓库里以什么物理形态存在。三者依次接力,缺一环构建就不成立。
一句话锚点:编译解决「SQL 从哪来」,DAG 解决「先跑谁后跑谁」,物化解决「数据以什么形态住进仓库」——一章讲完 dbt 的全部核心机制。
动手前把三组常被混淆的概念区分开,本章的理解成本会降一半:
2.1 编译与执行引擎:从 Jinja 到 DAG —— 拆解编译的完整过程:模板语法如何被渲染、引用如何被替换成真实表名、依赖图如何在编译期成形。读完这节,「dbt 到底帮我做了什么」就不再是黑盒。
2.2 物化策略:五种物化的取舍 —— 同一段模型逻辑,可以落成视图(每次现算)、表(整表重写)、增量表(只算新增)、临时结构(不落库)等多种形态。这节给出五种物化的机理对比和一个四要素选型法。
2.3 增量模型与快照:状态保留的两条路径 —— 增量模型解决「数据太多不能每次全算」,快照解决「上游改了历史我还想知道原来长什么样」。两者经常被混为一谈,这节用一对实验把它们的行为差异钉死。
三节是「编译 → 排序 → 落地」的工序顺序,前一节的输出是后一节的输入:编译产出纯 SQL 与依赖图,依赖图喂给执行计划,执行计划决定每个模型用什么物化方式写进仓库。
2.1 编译引擎 2.2 物化策略 2.3 增量与快照 模板SQL + 引用 --> 每个模型选形态 --> 两种高级形态深钻 | | | v v v 纯SQL + DAG 视图/表/增量/临时 省算力/留历史
前置知识:第一章的定位与架构常识(尤其 1.2 节那条「一条命令的旅程」);SQL 的基础读写能力。本章会用到少量 Jinja 模板语法,但只用到引用与条件两种,现场即学即会。
往后的延伸:第三章把本章的机制用到真实项目里——分层规范是物化策略的组织化应用,测试体系挂在 DAG 的每个节点上;第四章的性能调优本质上是本章物化选择的精细化。如果时间只够精读一章,就是本章。