
数据工程师用 SQL 写 select,dbt 把它变成可追溯、可测试、可版本化的 ” 数据模型生产线 ”——而现在 main 分支已经从 Python 切到 Rust,主角是 Apache 2.0 的 dbt-core v2.0 alpha(Fusion 引擎基础)。
写在前面
2016 年 Fishtown Analytics(现 dbt Labs)做 dbt 的时候,目标是让数据分析师像软件工程师一样工作:写 select、用 Jinja 模板、做版本控制、跑测试、生成文档。9 年过去,dbt 已经成为 ELT 时代 ”T” 环节的事实标准——100K+ 社区成员、dbt Cloud 年化数亿美元 ARR、所有云数仓(Snowflake / BigQuery / Databricks / Redshift)官方支持。
但 Python 实现的 dbt Core v1.x 越来越力不从心:大项目 parse 慢到分钟级、Jinja 模板表达力有上限、Python 依赖地狱让 CI 痛苦。
2025 年 5 月 28 日,dbt Labs 在 dbt-labs/dbt-fusion 开源了 dbt Fusion 引擎——一个 用 Rust 完整重写 的 dbt 执行引擎。2026 年 7 月,dbt-core 的 main 分支正式切到 v2.0 alpha,Python 实现被搬到 1.latest 分支继续维护。
这是一次 ” 自上而下 ” 的破旧立新:项目本身没改名、协议没改、YML 格式没改,但底层执行引擎换了语言、换了架构、换了产物格式(JSON → Parquet)。
对于正在选型数据转换工具的团队,这是一个绕不开的节点。
一、它解决什么问题
dbt(Data Build Tool)填补的是 ELT 流程里 “T”(Transform)的空白。在 dbt 之前,”T” 通常意味着 Airflow 调 Python 脚本或一堆手写 SQL 文件——没测试、没血缘、没文档、没法回滚。
一句话卖点:用 SQL select + Jinja + YAML,定义可测试、可版本化、有血缘的数据模型,dbt 帮你把它们编译成下游数仓(DWH)里的表和视图。
基本信息
| 字段 | 值 |
|---|---|
| 项目名 | dbt-core(main 分支已切到 v2.0 alpha) |
| 仓库 | dbt-labs/dbt-core |
| 协议 | Apache License 2.0 |
| 语言 | Python(v1.10-) / Rust(v2.0 alpha,main 分支) |
| commits | 10,682(main 分支,包含 v2.0 alpha 工作) |
| 商业实体 | dbt Labs(前身 Fishtown Analytics,2016 创立) |
| 商业产品 | dbt Cloud(dbt Fusion + 调度 /CI/ 文档托管 / 告警) |
| 社区 | 100,000+ members(dbt Community Slack) |
| 1.latest 分支 | 仍在维护 Python v1.x 实现 |
二、核心能力:dbt 能做什么
dbt-core 不是一个数据库,不是一个 ETL 工具,是一个 数据转换的 ” 框架 + 执行引擎 ”。它跑在已有的数仓之上。
1. 四类核心对象
- Models(模型):放在
models/目录的.sql文件,每个文件一个select,编译成下游数仓的一张表 / 视图 - Seeds(种子):放在
seeds/目录的 CSV 小文件,dbt 帮你导入成表(用于查表类维表) - Tests(测试):YAML 里挂
unique/not_null/relationships/ 自定义 SQL,dbt 跑完模型后校验 - Macros(宏):Jinja 模板的复用片段,dbt 自带 100+ macro 抹平不同数仓的 SQL 方言差异
2. 四种物化方式
每张模型表要选 ” 怎么生成 ”:
| 物化 | 行为 | 适用场景 |
|---|---|---|
| view | 每次跑 create view |
轻量、不占存储、查时算 |
| table | 每次跑 create table as |
慢但简单 |
| incremental | 只插新数据(merge / insert + 唯一键) |
大表、每日增量 |
| ephemeral | 编译成 CTE,不落表 | 中间复用片段,不占资源 |
3. 三件工程化武器
- Ref 函数 + DAG 血缘:
{{ref('stg_orders') }}让 dbt 自动解析依赖,生成 DAG,文档里直接可视化 - state:modified 增量构建:v1.1+ 支持,CI 上只跑 PR 改过的模型 + 下游
- dbt docs + manifest.json:
dbt docs generate输出静态站点,含 DAG、列级血缘、所有 model / test / macro 文档
4. 包管理
dbt deps 装 hub.getdbt.com 上的官方 / 社区包,标准做法是写 packages.yml:
packages:
- package: dbt-labs/dbt_utils
version: [">=1.0.0", "<2.0.0"]
生态包覆盖:审计(dbt-audit-helper)、日期维度(dbt_date)、SQL 片段(dbt_utils)、方言扩展(dbt-bigquery / dbt-snowflake / dbt-redshift / dbt-databricks / dbt-postgres 等)。
三、v2.0 重头戏:Rust 写的 Fusion 引擎到底变了什么
这是 2025-2026 年 dbt 最值得讲的事。v2.0 alpha 已经在 main 分支上,v1.x 留在 1.latest 分支维护。
1. 性能:parse / compile 快到 ” 你愿意开 watch 模式 ”
v1.x 的 Python 解析在大项目(1000+ model)上常常分钟级。Fusion 引擎 README 原话:”parse and compile times are dramatically improved, especially on the largest dbt projects.” 实际经验反馈:5-30 倍提升——大项目从 ” 跑一次 dbt parse 喝杯咖啡 ” 变成 ” 秒级 ”。
2. 严格性:从 ” 跑通就行 ” 到 ”parse 时就报错 ”
v1.x 对 YAML 配置基本不做校验,写错字段也能跑(只是无效)。Fusion 引擎使用 机器生成的 JSON schema(dbt-schemas crate)严格校验,配错直接报错在 parse 阶段。
3. 产物升级:JSON → Parquet
v2.0 引入 Parquet artifacts(manifest.parquet 等),比 JSON 小一个量级、可以直接 SQL 查询。想做 ” 项目元数据分析 ”(比如 ” 所有 model 的平均行数趋势 ”)的团队,SQL 查 Parquet 就行,不用再解析 JSON。
4. 安装:单二进制,零依赖
v1.x 是 pip install dbt-core dbt-bigquery,要 Python 环境、要解决 adapter 依赖冲突。v2.0 是 单文件二进制,无 Python、无 JVM、随用随下:
curl -fsSL https://public.cdn.getdbt.com/fs/install/install.sh | sh -s -- --update
5. ADBC 驱动(Arrow Database Connector)
v1.x 走各 adapter 自己的数据库驱动(psycopg2 / snowflake-connector-python 等),性能瓶颈在行式协议。Fusion 引擎统一用 Arrow 列式协议 + ADBC,数据传输效率上一个台阶。
6. Language Server + VS Code 扩展
Fusion 引擎自带 LSP(Language Server Protocol)实现,VS Code / Cursor 装扩展后能拿到:
- model 内跨文件跳转(
ref()go-to-definition) - 列级补全(知道
stg_orders有哪些字段) - 实时校验(写错 macro 当场红线)
v1.x 也有 dbt Power User 这类第三方扩展,但都是 hack SQL parser;Fusion 是官方一等公民。
7. 平台支持矩阵
| OS | x86-64 | ARM |
|---|---|---|
| macOS | 🟢 | 🟢 |
| Linux | 🟢 | 🟢 |
| Windows | 🟢 | 🟡 |
截至 2026 年 8 月,Windows ARM 还不支持。
四、生态与时间线:Fusion 引擎的发布节奏
dbt-fusion 仓库 2025-05-28 首次公开,2,723 commits,按组件分批开源:
| 目标日期 | 里程碑 | 说明 |
|---|---|---|
| 2025-05-28 | 首次发布 | parser + schemas + dbt-jinja + Snowflake ADBC |
| 2025-06-09 | Databricks adapter | Databricks ADBC + Fusion adapter |
| 2025-06-30 | BigQuery adapter | BigQuery ADBC + Fusion adapter |
| 2025-07-31 | Redshift adapter | Redshift ADBC + Fusion adapter |
| 2025-09-30 | OSS adapters | Adapter 组件以 Apache 2.0 协议发布 |
| TBD | ANTLR grammars | SQL 方言语法(Snowflake / Databricks / BigQuery / Redshift) |
核心商业逻辑:Fusion 引擎的 ” 代码 ” 和 ” 语言服务 ” 开源,dbt Cloud 的 ” 调度 + CI/CD + 文档托管 + 告警 + 监控 ” 商业化——标准开源核心 + SaaS 变现。
v1.x (Python) 不会突然死:1.latest 分支继续修 bug,dbt Labs 明确 ”v1 is still maintained as dbt Core v1.x”。
五、对比:dbt vs sqlmesh vs Airflow vs Great Expectations
dbt 不在真空里。最常被放在一起比的是:
| 工具 | 核心定位 | 跟 dbt 关系 |
|---|---|---|
| sqlmesh | 同赛道(SQL 转换 + DAG + 测试),新兴竞品(Tobiko Data) | 强调 ” 虚拟环境 ” 和 ”plan/apply” 工作流,UI 更现代;生态小 |
| Apache Airflow | 通用编排(DAG + task 调度) | 不是替代,是 上游:Airflow 调度 dbt run(BashOperator 调 dbt CLI) |
| Great Expectations | 数据质量(expectation suite) | 互补:GE 验证数据契约,dbt 转换数据;可同项目配合 |
| dbt-core | SQL 转换的事实标准 | 自身 |
核心判断:
- 如果团队已经在用 Snowflake / BigQuery / Databricks / Redshift 做 ELT 的 ”T” 环节,dbt 仍然是最稳的选择——生态最大、招聘最容易、问题答案最多
- 如果团队想要 ”plan/apply” 工作流(像 Terraform 那样)或者 M1/M2 极致性能,可以看 sqlmesh
- 如果团队连调度都没有,dbt 解决不了;上 Airflow + dbt 才是完整 ELT
dbt + 100K 社区 + Apache 2.0 + dbt Labs 持续重金投入——短期不会被颠覆。
六、实战:3 步跑通 dbt-core(v1.x Python 版)
走 v1.10 是因为稳定;v2.0 alpha 等 GA 再上生产。
# 1. 建项目 + 装 dbt + adapter(以 BigQuery 为例)pip install dbt-core dbt-bigquery
dbt init my_project
cd my_project
# 2. 配置 profiles.yml(~/.dbt/profiles.yml)my_project:
target: dev
outputs:
dev:
type: bigquery
project: my-gcp-project
dataset: dbt_dev
keyfile: /path/to/service-account.json
# 3. 写第一个 model + 跑 + 测
echo "SELECT 1 AS id, 'hello' AS msg" > models/hello.sql
dbt run # 编译 + 物化
dbt test # 跑所有 test
dbt docs generate && dbt docs serve # 看文档站
跑通后打开 http://localhost:8080,能看到 DAG、血缘、列级血缘、所有 model 文档。
fusion 版 对比:
# 装 VS Code 扩展(推荐)→ 一键装 fusion CLI + language server
# 或者直接装 CLI
curl -fsSL https://public.cdn.getdbt.com/fs/install/install.sh | sh -s -- --update
dbt --version # 应该看到 dbt-core v2.x
七、风险与坑
- v2.0 还是 alpha:main 分支明确写 ”Behavior, APIs, and on-disk formats may change before the stable release.” 生产项目锁定 v1.10,等 v2.0 GA
- adapter 锁定:v1.x 的 dbt-bigquery 和 v1.10 绑死,升 v1.x 小版本要同步升 adapter;Fusion 引擎现在只支持 Snowflake / Databricks / BigQuery / Redshift 四家
- Python 依赖:v1.x 装 adapter 一堆 native 依赖(ODBC driver / Snowflake connector),CI 容器镜像要小心
- YAML 校验宽松 :v1.x 写错字段不报错,排查时间多花在 ” 为什么我的 config 没生效 ”——Fusion 引擎的 JSON schema 严格校验是 升级 v2 的最大动力之一
- 没有调度:dbt 不调度,需要 Airflow / Dagster / Prefect / dbt Cloud 配合
- 大项目性能:v1.x 在 1000+ model 上确实慢,Fusion 引擎的 ”5-30 倍 ” 提升很关键
- 大表全量重建:误用
materialized='table'会触发全量重建;大表必须用incremental+ 配合 unique_key
八、总结
3 个最值得装 / 等的理由:
- ELT 的 ”T” 环节事实标准:100K+ 社区 + 所有云数仓官方支持 + 招聘市场最大——团队不会选错
- Apache 2.0 永久开源:v1.x 和 v2.0 核心都是 Apache 2.0,不会被 ” 商业化卡脖子 ”
- Fusion 引擎值得期待:Rust 重写 + ADBC + Parquet artifacts + Language Server + 单二进制——v1.x 的所有痛点都在被解决
一句话建议:
新项目先用 v1.10 跑起来;v2.0 GA 后(看 dbt Labs 公告,预计 2026 年底到 2027 年初)做 POC 验证后切换;不要在 alpha 阶段上生产。
参考
- dbt-labs/dbt-core · GitHub — v2.0 alpha main 分支,v1.x 在 1.latest
- dbt-labs/dbt-fusion · GitHub — Fusion 引擎源码(Rust,2,723 commits)
- The dbt Viewpoint — dbt Labs 的官方方法论
- Fusion Engine: Path to GA — v2.0 路线图
- What is dbt? — dbt Docs — 入门
- SQLMesh 文档 — 同赛道新兴竞品
- dbt Community Slack — 100K+ 成员主社区
- Apache 2.0 License — 协议全文