用途:dbt 在数据仓库内用 SQL 完成数据转换,适合分析工程与数据转换场景,可在 Snowflake、BigQuery、Databricks、Redshift 等云仓库中转换原始数据。
主要能力:以 ref() 与 source() 声明式建模并解析依赖;用 Jinja 宏编写可复用 SQL 逻辑;通过 YAML 定义列级测试(unique、not_null、relationships 等)与文档;从代码库 schema 自动生成交互式依赖血缘图;支持增量物化(materialized='incremental')与 is_incremental() 时间戳过滤,避免全量重建大表。资料提到 v2.0 引入 Rust 编写的 Fusion Engine 以提升性能。
使用方式:模型文件如 models/marts/fct_orders.sql 中使用 {{ config(materialized='table') }} 与 {{ ref('stg_orders') }};schema.yml 中 version: 2 下声明 models、columns、description 与 tests;宏放在 macros/ 目录,例如 cents_to_dollars(column_name, decimal_places=2)。增量模型可配置 unique_key,并在 is_incremental() 分支中按 event_timestamp 过滤。
适用场景:分层组织项目(staging 与原始源一一对应、intermediate、marts);在 CI 中对每个 pull request 运行 dbt test 以捕获 schema 回归;为百万行级事实表实现增量模型。
限制与注意事项:不要写死原始表引用,应始终用 source() 或 ref() 维持 DAG 血缘;staging 模型只做清洗、类型转换与重命名,不写业务逻辑;避免硬编码环境,用 profiles.yml 中 target.name 条件区分 dev 与 prod。常见问题包括 ref 名称拼写或文件缺失导致编译错误、非唯一连接产生重复键导致 unique 测试失败、上游增删列导致增量运行 schema 变更错误(可执行 dbt run --full-refresh 重建)。具体安装命令、收费与平台支持资料暂未提供。