阅山

  • WIN
    • CSharp
    • JAVA
    • OAM
    • DirectX
    • Emgucv
  • UNIX
    • FFmpeg
    • QT
    • Python
    • Opencv
    • Openwrt
    • Twisted
    • Design Patterns
    • Mysql
    • Mycat
    • MariaDB
    • Make
    • OAM
    • Supervisor
    • Nginx
    • KVM
    • Docker
    • OpenStack
  • WEB
    • ASP
    • Node.js
    • PHP
    • Directadmin
    • Openssl
    • Regex
  • APP
    • Android
  • AI
    • Algorithm
    • Deep Learning
    • Machine Learning
  • IOT
    • Device
    • MSP430
  • DIY
    • Algorithm
    • Design Patterns
    • MATH
    • X98 AIR 3G
    • Tucao
    • fun
  • LIFE
    • 美食
    • 关于我
  • LINKS
  • ME
Claves
阅山笑看风云起,意气扬帆向日辉
  1. 首页
  2. AI
  3. 大数据
  4. 正文

dbt Core vs SQLMesh:数据建模工具正在从“SQL转换”走向“DataOps

2026-09-06

在现代数据平台中,数据处理链路通常可以抽象成:

数据源
  ↓
数据采集
  ↓
ODS
  ↓
DWD
  ↓
DWS
  ↓
ADS
  ↓
BI / 报表 / AI

如果数据采集使用 SeaTunnel,调度使用 DolphinScheduler,数据仓库使用 ClickHouse、Doris、Snowflake、BigQuery 等,那么还有一个非常关键的问题:

谁负责把这些原始数据转换成真正可以被业务使用的数据模型?

过去几年,这个问题几乎可以直接回答:

dbt。

但现在,一个非常值得关注的竞争者出现了:

SQLMesh。

两者表面上都可以写 SQL、建立模型、管理 DAG、执行测试,因此很多人会把 SQLMesh 简单理解为“另一个 dbt”。

实际上,两者的设计哲学已经出现了明显差异。


一、先给结论

如果只用一句话概括:

dbt 更像“数据转换开发框架”,SQLMesh 更像“数据转换 + DataOps + 数据发布系统”。

这也是两者最大的区别。

可以简单理解为:

dbt

SQL
 ↓
Model
 ↓
DAG
 ↓
Run
 ↓
Test
 ↓
Documentation

而 SQLMesh 更强调:

SQL / Python
      ↓
Model
      ↓
Dependency
      ↓
Impact Analysis
      ↓
Plan
      ↓
Review
      ↓
Backfill
      ↓
Apply
      ↓
Environment Promotion

dbt 的核心问题是:

“我要怎么把数据转换出来?”

SQLMesh 更进一步问:

“我要怎么安全地修改、测试、回溯、发布这些数据模型?”

SQLMesh 官方目前也明确把自己定位为不仅仅是 dbt alternative,而是面向 DataOps 的数据转换框架。


二、dbt:现代数据建模的事实标准

dbt 的设计非常漂亮。

它没有试图重新发明数据库。

它做的是:

把 SQL 工程化。

传统数据仓库开发经常是:

SQL脚本
存储过程
Shell
定时任务
手工执行

最终变成一团难以维护的代码。

dbt 把它抽象成:

Model
Source
Test
Macro
Seed
Snapshot
Documentation
DAG

例如:

models/
├── staging/
│   ├── stg_orders.sql
│   └── stg_products.sql
│
├── dwd/
│   ├── dwd_orders.sql
│   └── dwd_production.sql
│
└── dws/
    ├── dws_daily_production.sql
    └── dws_equipment_efficiency.sql

一个模型就是一个 SQL:

select
    order_id,
    product_id,
    quantity,
    order_time
from {{ ref('stg_orders') }}

然后:

ref()
 ↓
依赖关系
 ↓
DAG
 ↓
dbt build

这就是 dbt 最核心的价值。

dbt 官方目前仍然将其定位为用于现代数据仓库中的数据转换框架,并提供模型、文档、测试、依赖和协作能力。


三、SQLMesh为什么会出现?

问题在于:

当数据平台越来越大以后,仅仅拥有 DAG 还不够。

假设企业有:

3000 个模型
5000 张表
100TB 数据
50 个数据开发人员

现在开发人员修改:

dwd_production.sql

那么真正的问题不是:

“这个 SQL 能不能执行?”

而是:

“这个修改会影响什么?”

例如:

dwd_production
       ↓
dws_production_daily
       ↓
dws_equipment_efficiency
       ↓
ads_factory_dashboard
       ↓
BI
       ↓
AI Agent

如果修改了 DWD:

dwd_production

理论上可能需要重新计算几十个甚至几百个下游模型。

传统数据转换框架很容易把这个问题变成:

修改 SQL
   ↓
重新 build
   ↓
发现数据不对
   ↓
重新 backfill
   ↓
发现还有历史数据
   ↓
继续 build

SQLMesh 的设计重点之一,就是把这种问题前置到:

Plan


四、Plan 是 SQLMesh 最值得关注的设计

SQLMesh 的核心工作流不是简单的:

修改
 ↓
执行

而是:

修改代码
 ↓
SQLMesh Plan
 ↓
分析变化
 ↓
分析影响范围
 ↓
计算需要重新处理的数据
 ↓
生成执行计划
 ↓
Review
 ↓
Apply

这就是典型的 DataOps 思路。

SQLMesh 官方文档将 impact analysis、Plan/Apply、Virtual Data Environments 等列为核心能力。

例如:

修改:

dwd_production.sql

        ↓

SQLMesh发现:

dwd_production
      ↓
dws_production
      ↓
ads_production
      ↓
BI

然后告诉开发人员:

Detected changes:

1 model changed
7 downstream models affected

Required backfill:

2026-01-01
~
2026-09-06

这就从:

“执行 SQL”

升级到了:

“管理数据模型变更”。


五、dbt 的强项:生态

如果比较两者最大的现实优势:

dbt 最大的优势不是技术,而是生态。

dbt 已经形成了非常庞大的生态系统:

dbt
├── 大量 Adapter
├── 大量 Package
├── 大量教程
├── 大量企业案例
├── 大量开发人员
├── 大量第三方工具
├── IDE
├── CI/CD
├── Semantic Layer
└── Catalog

这意味着:

遇到问题,大概率已经有人遇到过。

这对于企业项目非常重要。

尤其是:

OpenMetadata
Airflow
Dagster
BI
Data Quality
GitHub
CI/CD

这些外围生态与 dbt 的结合已经非常成熟。

例如 OpenMetadata 可以直接利用 dbt 的:

manifest.json
catalog.json
run_results.json

获取模型、列、测试和血缘等信息。

因此:

dbt
 ↓
dbt artifacts
 ↓
OpenMetadata

是一条非常成熟的路线。


六、SQLMesh 的强项:DataOps

SQLMesh 则完全不同。

它并不是简单地把 dbt 的功能重新实现一遍。

它从设计上就更强调:

数据模型
+
状态
+
变更
+
环境
+
发布
+
回滚
+
Backfill

因此它更接近:

GitOps / CI/CD 的思路应用到数据仓库。


七、Virtual Data Environment

这是 SQLMesh 很有意思的一个设计。

假设有:

生产环境

production

开发人员 Alice 修改:

dwd_production

Bob 同时也修改:

dws_production

传统做法可能需要:

dev_alice
dev_bob
test
production

然后不断复制表。

数据量大的时候非常麻烦。

SQLMesh 的 Virtual Data Environment 试图解决这个问题:

                production
                    │
          ┌─────────┴─────────┐
          ↓                   ↓
      dev_alice            dev_bob
          │                   │
      修改模型              修改模型

没有发生变化的数据可以复用。

只有发生变化的模型需要建立新的数据版本。

这对于:

10TB
100TB
1PB

级别的数据仓库尤其有价值。


八、Incremental:两者的思路也不完全一样

数据仓库里最容易踩坑的事情之一就是增量计算。

例如:

2026-09-01
2026-09-02
2026-09-03
2026-09-04

正常情况下每天计算一次。

但是:

2026-09-02

的数据直到:

2026-09-06

才补回来。

传统:

max(timestamp)

思路容易产生问题。

因为:

09-01 ✓
09-02 ✗
09-03 ✓
09-04 ✓

实际上存在一个历史数据缺口。

SQLMesh 更强调:

Interval Tracking

即跟踪:

哪些时间区间已经计算
哪些时间区间没有计算
哪些时间区间需要重新计算

这对于工业数据尤其重要。


九、为什么工业数据特别适合考虑SQLMesh?

工业数据和互联网业务数据有一个明显区别:

历史数据经常会迟到、修正和补采。

例如 PLC:

设备A

09:00
09:01
09:02
...

网络中断:

09:30 ~ 10:00

恢复之后:

历史数据重新上传

于是数据库最终变成:

09:00 ✓
09:01 ✓
...
09:29 ✓
09:30 ✗
09:31 ✗
...
10:00 ✓

之后又补回来:

09:30 ~ 10:00

这个时候真正需要解决的是:

如何只重新计算受影响的数据区间?

这恰恰是 SQLMesh 的设计优势之一。


十、ClickHouse是SQLMesh比较有吸引力的地方

如果企业的数据仓库使用 ClickHouse,那么 SQLMesh 值得重点考虑。

SQLMesh 官方提供了专门的 ClickHouse integration,并针对 ClickHouse 的 MergeTree、ORDER BY、集群、ON CLUSTER、物理 schema、partition 等进行了适配。

也就是说:

SQLMesh
   ↓
ClickHouse

并不是简单的:

把SQL发送给数据库

而是针对 ClickHouse 的数据模型和物理执行特性做了适配。

对于:

工业物联网
设备数据
生产数据
能源数据
质量数据
实时/准实时分析

这种 ClickHouse 场景,SQLMesh 的工程模型非常有吸引力。


十一、Doris是另一个问题

如果企业主要使用:

Apache Doris

那么情况就没有那么简单。

Doris 对 dbt 的生态支持已经比较明确,因此:

Doris
 ↓
dbt

是一条相对稳妥的路线。

而 SQLMesh 的 Doris 支持仍然处于持续完善阶段。

因此:

ClickHouse + SQLMesh

和:

Doris + SQLMesh

不能简单等价。

如果企业最终确定:

ClickHouse 是核心数仓

那么我会认真考虑 SQLMesh。

如果:

Doris 是核心数仓

那么目前我仍然更倾向于 dbt。


十二、OpenMetadata又把天平拉回dbt

这可能是 SQLMesh 最大的现实问题之一。

假设你的架构是:

SeaTunnel
    ↓
ClickHouse
    ↓
SQLMesh
    ↓
OpenMetadata
    ↓
BI

SQLMesh 可以产生:

Model
SQL
Dependency
Lineage
Column

但是:

OpenMetadata 对 SQLMesh 的原生集成程度目前不能简单认为等同于 dbt。

而 dbt 已经有成熟的:

manifest.json
catalog.json
run_results.json

生态。

所以如果:

OpenMetadata 是整个企业的数据治理核心

dbt 仍然具有明显优势。


十三、两者最大的思想差异

我认为真正值得记住的不是功能列表,而是下面这张表。

思维方式dbt CoreSQLMesh
核心定位Data TransformationData Transformation + DataOps
核心对象ModelModel + State + Environment
DAG强强
SQL建模★★★★★★★★★★
测试★★★★★★★★★☆
文档★★★★★★★★★
生态★★★★★★★★
人才★★★★★★★~★★★
Adapter★★★★★★★★★
ClickHouse★★★★★★★★★
Doris★★★★☆★★~★★★
OpenMetadata★★★★★★★★
Incremental★★★★★★★★★
Backfill★★★★★★★★★
Impact Analysis★★★★★★★★★
Virtual Environment★★★★★★★★
Plan/Apply★★★★★★★★★
DataOps★★★★★★★★★
企业成熟度★★★★★★★★★
学习成本低中
社区规模很大较小

这里需要特别强调:

这不是说 SQLMesh 的每一项功能都“比 dbt 强”。

而是两者的设计重心不同。


十四、一个容易误解的问题:SQLMesh是不是“下一代dbt”?

我认为不能这么简单描述。

更准确的说法是:

                    数据转换
                       │
          ┌────────────┴────────────┐
          ↓                         ↓
        dbt                      SQLMesh
          │                         │
      Analytics               DataOps
      Engineering                 │
          │                 ┌───────┼────────┐
          │                 ↓       ↓        ↓
          │               Plan   State   Environment
          │
          └──────────────┐
                         ↓
                       Model

dbt 的价值在于:

把 SQL 开发工程化。

SQLMesh 的价值在于:

把数据模型的生命周期工程化。

这两个方向并不是完全互斥。

事实上,SQLMesh 官方已经提供了运行 dbt 项目的能力,并且专门处理 dbt incremental model 与 SQLMesh incremental model 之间的差异。

所以未来甚至可能出现:

dbt生态
   ↓
SQLMesh
   ↓
DataOps

这样的演进路线。


十五、Star数量应该怎么看?

很多人会看到:

dbt Core       ~13K
SQLMesh        ~3K

然后认为:

SQLMesh 不成熟。

这个结论并不完全正确。

GitHub Star 确实能够反映社区关注度,因此 dbt 在社区规模、人才和生态方面的优势毫无疑问。

但 Star 并不能直接衡量:

架构设计
执行模型
增量能力
Backfill
数据变更管理

更值得注意的是,2026年3月,SQLMesh 已经进入 Linux Foundation,由中立治理模式推动长期发展。

因此现在应该把 SQLMesh 看成:

一个社区规模明显小于 dbt,但已经值得企业认真评估的 DataOps 框架。

而不是简单的“dbt替代品”。


十六、如果是大型智能工厂,我会怎么选?

假设架构是:

PLC
MES
ERP
IoT
   ↓
SeaTunnel
   ↓
ClickHouse
   ↓
?????
   ↓
OpenMetadata
   ↓
MetricFlow
   ↓
自研BI
   ↓
AI Agent

那么我会根据数据库来决定。

第一种:ClickHouse为核心

SeaTunnel
    ↓
ClickHouse
    ↓
SQLMesh
    ↓
OpenMetadata
    ↓
MetricFlow
    ↓
BI / AI

我认为:

SQLMesh非常值得选。

因为工业数据的:

历史补算
迟到数据
分区计算
模型变更
多人开发
数据发布

都比较符合 SQLMesh 的设计方向。


第二种:Doris为核心

SeaTunnel
    ↓
Doris
    ↓
dbt Core
    ↓
OpenMetadata
    ↓
MetricFlow
    ↓
BI / AI

我会优先:

dbt Core。

主要原因不是 dbt 的 SQL 能力更强,而是:

Doris生态
+
dbt生态
+
OpenMetadata生态

组合更加成熟。


第三种:Doris + ClickHouse双引擎

如果最终架构是:

                  ┌→ Doris
SeaTunnel ────────┤
                  └→ ClickHouse
                         ↓
                   Transformation

那么我的第一选择反而是:

dbt Core。

因为这个时候最重要的是:

统一开发标准。

否则很容易变成:

Doris → dbt

ClickHouse → SQLMesh

Doris开发人员 → 一套规范

ClickHouse开发人员 → 另一套规范

最后数据平台内部出现两套模型体系。

对于大型企业,这种复杂度通常比工具本身的优势更值得警惕。


十七、最终评价

如果把两者比成软件工程领域的产品:

dbt 更像 Spring。

成熟、生态巨大、人才多、标准化程度高。

而:

SQLMesh 更像一个更强调现代 DevOps/DataOps 的新架构。

它并不是因为“功能更多”而有吸引力,而是因为它重新思考了:

数据模型到底应该怎样开发、测试、变更、回滚和发布。

所以我不会简单说:

SQLMesh 比 dbt 好。

也不会说:

dbt 比 SQLMesh 好。

更准确的结论是:

                  dbt                         SQLMesh

               生态优先                     工程能力优先
                  │                            │
                  ↓                            ↓
          大规模标准化开发              大规模DataOps
                  │                            │
                  ↓                            ↓
       Doris / 多数据库 / OpenMetadata      ClickHouse
                  │                            │
                  └──────────┬─────────────────┘
                             ↓
                       根据数仓选择

如果追求“稳”,选择 dbt。

如果追求“数据工程变更能力”,重点研究 SQLMesh。

如果你的核心数仓是 ClickHouse,我认为 SQLMesh 的价值明显高于它 3K GitHub Star 所表现出来的关注度。

如果你的核心数仓是 Doris,并且 OpenMetadata 是治理核心,我目前仍然更推荐 dbt Core。

最终真正值得做的,不是看 GitHub Star,而是拿你们实际的:

1000+ Model
+
10TB~100TB
+
多人并行开发
+
历史补算
+
ClickHouse/Doris
+
OpenMetadata
+
DolphinScheduler
+
BI持续查询

做一次真实 POC。

这一次 POC 的结果,会比“13K Star vs 3K Star”更有决策价值。

标签: 暂无
最后更新:2026-09-06

阅山

知之为知之 不知为不知

点赞

COPYRIGHT © 2099 登峰造极境. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备14031139号-5

川公网安备51012202000587号