



























今天在 GitHub Trending 上看到一个重磅更新:dbt Core v2.0 正式发布,这是数据工程领域最受欢迎的转换工具的一次根本性重构,用 Rust 从零重写带来性能飞跃。
dbt(data build tool)是数据分析师和工程师进行数据转换的首选工具,它让数据从业者能够像软件工程师编写应用程序一样来构建数据管道。v2.0 版本是一次彻底的架构升级:
核心变化:
解决的痛点:
dbt Core v2.0 采用模块化的 Rust 工作区设计,从 Cargo.toml 可以看到其架构:
[workspace]
members = [
"crates/dbt-parser", # 解析器
"crates/dbt-compilation", # 编译器
"crates/dbt-adapter", # 数据库适配器
"crates/dbt-dag", # DAG 调度
"crates/dbt-jinja", # Jinja 模板引擎
# ... 更多模块
]
核心组件分工:
从源码可以看到,v2.0 利用了多项 Rust 生态优化:
# 使用 DataFusion 作为 SQL 引擎
datafusion = { version = "50.3.0" }
# Arrow/Parquet 作为数据交换格式
arrow = { version = "=56.0.0" }
parquet = { version = "=56.0.0" }
# 异步运行时
tokio = { version = "1.41.1", features = ["rt-multi-thread"] }
性能提升来源:
tokio 异步运行时并行处理模型v2.0 为每个数据仓库提供专门的词法分析器:
"crates/dbt-sql/dbt-lexer-bigquery",
"crates/dbt-sql/dbt-lexer-databricks",
"crates/dbt-sql/dbt-lexer-duckdb",
"crates/dbt-sql/dbt-lexer-redshift",
"crates/dbt-sql/dbt-lexer-snowflake",
"crates/dbt-sql/dbt-lexer-trino",
这种设计让 dbt 能深度理解各数据库的 SQL 方言,提供更精准的语法高亮和错误提示。
支持的主流平台:
| 操作系统 | x86-64 | ARM |
|---|---|---|
| macOS | ✅ | ✅ |
| Linux | ✅ | ✅ |
| Windows | ✅ | 🟡(开发中) |
方式一:直接下载二进制
# macOS/Linux
curl -fsSL https://github.com/dbt-labs/dbt-core/releases/latest/download/dbt-$(uname -s)-$(uname -m) -o dbt
chmod +x dbt
sudo mv dbt /usr/local/bin/
方式二:使用 Homebrew
brew install dbt-labs/dbt/dbt
# 创建新项目
dbt init my_project
# 项目结构
my_project/
├── dbt_project.yml
├── models/
│ └── example.sql
├── seeds/
├── snapshots/
└── tests/
定义模型
-- models/staging/stg_orders.sql
with source as (
select * from raw.orders
),
cleaned as (
select
order_id,
customer_id,
order_date,
total_amount
from source
where status = 'completed'
)
select * from cleaned
运行模型
# 运行所有模型
dbt run
# 运行指定模型
dbt run --select stg_orders
# 带全量刷新
dbt run --full-refresh
定义测试
# models/staging/schema.yml
version: 2
models:
- name: stg_orders
columns:
- name: order_id
tests:
- unique
- not_null
- name: customer_id
tests:
- relationships:
to: ref('stg_customers')
field: id
运行测试
dbt test
dbt docs generate
dbt docs serve
-- models/orders_incremental.sql
{{
config(
materialized='incremental',
unique_key='order_id'
)
}}
select * from raw_orders
{% if is_incremental() %}
where order_date > (select max(order_date) from {{ this }})
{% endif %}
问题:v1.x 项目迁移到 v2.0 报错
解决:
1.latest 分支稳定版本问题:大型项目编译慢
解决:
dbt compile --target prod 生成缓存产物问题:连接数据库超时
解决:
profiles.yml 配置问题:Windows ARM 设备无法运行
解决:
dbt Core v2.0 是数据工程工具的一次重要进化。从 Python 到 Rust 的重写不仅带来性能飞跃,也标志着项目的成熟。对于正在使用 dbt 的团队,建议:
作为数据转换的事实标准,dbt 的这次技术栈升级值得每一位数据从业者关注。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。