sqlmesh 调研:Linux Foundation 接管的”dbt 终结者”,把开发环境搬出数仓

66次阅读
sqlmesh 调研:Linux Foundation 接管的

一个 Apache 2.0 的下一代数据转换框架——进 Linux FoundationPlan/Apply 工作流 (像 Terraform 那样审变更)、 虚拟数据环境(VDE,不吃数仓成本)——dbt 终于迎来一个认真的挑战者。

写在前面

dbt 是 ELT 时代 ”T” 环节的事实标准。但用了几年 dbt 的人都知道三个老毛病:

  1. 开发环境贵:每个开发者要在 Snowflake 里建一套 dev schema,跑一次完整 pipeline 烧掉几十美元
  2. 变更影响靠脑补:改一个 model 不知道会炸多少下游表,” 改 SQL 怕改错 ”
  3. Jinja + YAML 模板杂烩:dbt 项目里 Jinja 满天飞,新人第一周都在学模板语法

2026 年 8 月,sqlmesh 已经在 Linux Foundation 旗下,v0.236.x(仍在快速迭代),Apache 2.0 协议。它的三个核心设计直接对位上面三个痛点:

  • 虚拟数据环境(VDE):开发者的 SQL 通过 SQLMesh 引擎代理,零额外数仓成本
  • Plan / Apply(像 Terraform):改 SQL 前先 plan,看影响范围 + 自动生成的 diff,apply 才真正执行
  • 纯 SQL 配置MODEL(...) macro 在 SQL 文件顶部声明元数据,没有 Jinja 模板也能写

要不要从 dbt 迁移?还是从今天起新项目用 sqlmesh?这是每个数据团队都要面对的问题。

一、它解决什么问题

一句话卖点 :用纯 SQL(或 Python)写数据模型,SQLMesh 自动帮你做环境隔离 + 变更预览 + 增量追踪 + 列级血缘, 不污染生产数仓

基本信息

字段
项目名 sqlmesh
仓库 SQLMesh/sqlmesh(旧路径 TobikoData/sqlmesh 已重定向)
协议 Apache License 2.0(代码)/ CC-BY-4.0(文档)
最新版本 v0.236.1(2026 年 7 月,仍在快速迭代)
治理 Linux Foundation 项目
商业实体 Tobiko Data(核心贡献者,提供 Tobiko Cloud SaaS)
安装 pip install 'sqlmesh[lsp]'(PyPI)
VS Code 官方扩展(列级血缘、自动补全)

关键信号:Linux Foundation 接管的次年(2025 启动),sqlmesh 摆脱了 ” 单一公司项目 ” 的标签,进入基金会治理——这意味着大厂可以放心贡献代码,不会被 Tobiko 绑架。

二、核心能力:六件 sqlmesh 干得比 dbt 漂亮的事

1. 虚拟数据环境(VDE)—— 0 成本隔离

dbt 的开发工作流是 ” 每个开发者一份 dev schema”——跑一次完整 pipeline 烧钱。SQLMesh 用 虚拟数据环境

  • 你的 SQL 通过 sqlmesh 引擎跑,不直接写入数仓
  • 数据请求按需从生产数仓 ” 借 ” 过来(time-travel 查询)
  • 只有你 sqlmesh plan + apply 之后,改动才落到真实表

效果:开发环境 0 数仓成本,CI 也一样。Tobiko 官方博客声称可以为大团队节省 70%+ 数仓账单。

2. Plan / Apply 工作流 —— 像 Terraform 那样审变更

$ sqlmesh plan dev

输出不是 ” 开始跑了 ”,而是:

Summary of differences:
Models:
├── stg_orders       [ADDED]       → forward-only
├── fct_revenue      [NON-BREAKING] → add column `tax_amount`
└── dim_customers    [BREAKING]   → change grain

Direct local changes: 3
Indirect via depends_on: 17
Virtual update: 12

Approve? [y/n]

每个 model 标 [ADDED] / [NON-BREAKING] / [BREAKING]告诉你会不会炸下游 。点击 y 才真正执行。这是 Git PR review 思维的延伸—— 变更影响可视化

3. 纯 SQL 配置 —— 不要 Jinja 模板

dbt 的 model 长这样(要懂 Jinja):

{{config(materialized='incremental', unique_key='order_id') }}
SELECT * FROM {{ref('stg_orders') }}
WHERE order_date > '{{var("start_date") }}'

sqlmesh 的 model 长这样(纯 SQL):

MODEL (
  name tcloud_demo.fct_orders,
  cron '@daily',
  grain order_id,
  audits (UNIQUE_VALUES(columns = (order_id)), NOT_NULL(columns = (order_id)))
);

SELECT * FROM tcloud_demo.stg_orders
WHERE order_date > @start_date

MODEL(...) 是 SQLMesh 的声明式 macro,所有 metadata 都在 SQL 文件里。新人不用学 Jinja 也能上手。

4. 不再冗余建表 —— 智能增量

dbt 的 incremental model 每跑一次都会对比 unique_key。但 sqlmesh 更激进:

  • Track 哪些 data 已经被 processed(基于 time column + grain)
  • 只跑真正需要的 transformation(数据没变就不重跑)
  • 跨多个 incremental models 联动追踪

官方博客原话:”Never build a table more than once”——同一张表不被多次 build。

5. 内置单元测试 —— 像 pytest 那样写

$ sqlmesh create_test tcloud_demo.stg_payments --query tcloud_demo.seed_raw_payments "select * ... limit 5"
$ sqlmesh test

自动从种子数据生成测试 fixture,写到 tests/test_stg_payments.yaml,然后 sqlmesh test 跑全套。比 dbt 的 dbt test 早 5 年就有了 data-diff unit test 范式

6. 多方言 transpile —— 一次写,到处跑

写 Snowflake 方言 SQL,sqlmesh 编译时 transpile 到 BigQuery / Databricks / Redshift / DuckDB / Postgres / MySQL / MSSQL / T-SQL / Spark / Trino 等 10+ 方言。dbt 没有这种 ” 编译期 transpile” 能力——dbt adapter 只是连接驱动,方言得你自己处理。

三、执行引擎支持

SQLMesh 在 执行引擎层 抽象,不绑定特定数仓:

引擎 用途
DuckDB 本地开发默认,零依赖(sqlmesh init 选 DuckDB 立即跑通)
Snowflake 云数仓
BigQuery 谷歌云
Databricks Spark + Delta
Redshift AWS
PostgreSQL 自托管
MySQL 自托管
MSSQL 企业
Trino / Presto 查询联邦
Spark 大数据
ClickHouse OLAP
MotherDuck 云 DuckDB

DuckDB-first 哲学:官方 quickstart 默认 DuckDB,1 分钟跑通——比 dbt 装一堆 adapter 友好得多。

四、与 dbt-core 详细对比

维度 dbt-core(v1.x) dbt-core(v2.0 alpha) sqlmesh
协议 Apache 2.0 Apache 2.0 Apache 2.0
治理 dbt Labs(公司) dbt Labs(公司) Linux Foundation
核心语言 Python Rust(重写中) Python
模型定义 SQL + Jinja + YAML 同 v1 纯 SQL + MODEL macro
环境隔离 dev schema(烧钱) 同 v1 VDE(零成本)
变更审查 state:modified 增量 Plan / Apply
单元测试 dbt-utils 包 内置 + data fixture
多方言 transpile 10+ 方言内置
不冗余建表 需要配置 内置智能追踪
LSP / VS Code 第三方扩展 Fusion 自带 LSP 官方扩展
调度 自己接 同 / dbt Cloud 自己接 / Tobiko Cloud
商业产品 dbt Cloud dbt Cloud Tobiko Cloud
生态成熟度 100K+ 社区 继承 v1 5K+ 社区,快速增长
文档 完整 完整 完整
学习曲线 中(Jinja + YAML) 继承 低(纯 SQL)

五、Tobiko Cloud —— 商业那部分

SQLMesh 核心 Apache 2.0 全开源,商业产品是 Tobiko Cloud

  • Web UI:Plan/Apply 可视化(浏览器里审变更)
  • Scheduler:Airflow / Dagster 集成
  • CI/CD Bot:GitHub 集成,蓝绿部署
  • 跨仓库协作:跨 SQLMesh 项目的环境共享

Tobiko 创始人是前 Airbnb 数据工程师,团队规模小但 技术深度被 dbt 创始人公开认可(dbt 文档里多次引用 sqlmesh 设计理念作为对比)。

六、实战:3 步跑通 sqlmesh

# 1. 装 + 起项目(默认 DuckDB,零数仓成本)mkdir sqlmesh-example && cd sqlmesh-example
python -m venv .venv
source .venv/bin/activate
pip install 'sqlmesh[lsp]'
sqlmesh init  # 选 DuckDB,跟着提示走

# 2. 写第一个 model(models/stg_payments.sql)cat > models/stg_payments.sql << 'EOF'
MODEL (
  name tcloud_demo.stg_payments,
  cron '@daily',
  grain payment_id,
  audits (UNIQUE_VALUES(columns = (payment_id)),
          NOT_NULL(columns = (payment_id)))
);

SELECT id AS payment_id, order_id, payment_method,
       amount / 100 AS amount
FROM tcloud_demo.seed_raw_payments
EOF

# 3. plan + apply + 测
sqlmesh plan dev          # 看变更影响 + 列级血缘
sqlmesh apply             # 批准后执行
sqlmesh create_test tcloud_demo.stg_payments --query ...  # 生成测试
sqlmesh test              # 跑测试

跑通后 VS Code 装 SQLMesh 扩展,能拿到列级血缘、自动补全、plan 模式 UI。

七、风险与坑

  1. 生态小:5K+ 社区 vs dbt 100K+——招人难、Stack Overflow 答案少、第三方包少
  2. 项目年轻 :v0.236.x(0.x 版本),API 还在变, 生产锁定建议钉版本
  3. 调度自己接:sqlmesh 不内置调度,要 Airflow / Dagster / Tobiko Cloud
  4. VDE 的局限:time-travel 查询要数仓支持;老 Snowflake/Redshift 实例可能有兼容问题
  5. dbt 迁移成本 :已有 dbt 项目,sqlmesh 提供 dbt 项目 兼容读取(不是迁移),但建议新建项目用
  6. Tobiko 商业绑定:虽然进 Linux Foundation,但核心贡献者仍是 Tobiko 团队;dbt Labs 那种 ” 公司垄断 ” 风险还在
  7. 单元测试 fixture 体积:大表测试 fixture 文件可能很大,CI 要注意
  8. Python model 支持:sqlmesh 支持 Python model,但 Python 生态不如 dbt-ml / dbt-external-packages 成熟

八、总结

3 个最值得装的理由

  1. Linux Foundation 接管 + Apache 2.0:治理风险显著低于 dbt(dbt Labs 单一公司控制);基金会项目可以放心上生产
  2. Plan/Apply + VDE 工作流:彻底改变 ” 改 SQL 怕改错 ” 的现状;开发成本接近 0
  3. 纯 SQL + 多方言 transpile:新人上手快(不用学 Jinja);一次 SQL 多数仓可用

一句话建议

新项目从今天起直接用 sqlmesh + DuckDB 起步;如果团队 dbt 资产重,不要急着迁——但新模块建议用 sqlmesh 试点,3 个月评估迁移 ROI。

参考

  1. SQLMesh/sqlmesh · GitHub — 主仓库(已从 TobikoData 重命名)
  2. SQLMesh 文档 — 官方文档
  3. Linux Foundation — sqlmesh 治理方
  4. Tobiko Cloud — 商业 SaaS
  5. Plan/Apply 工作流详解 — 架构图
  6. dbt vs sqlmesh 功能对比 — Tobiko 官方博客
  7. We Need Even Greater Expectations — sqlmesh 单元测试设计
  8. Apache 2.0 License — 协议全文
正文完