用途
dbt(data build tool)让分析工程师能够更高效地在数据仓库中转换数据。它是一个开发框架,把软件工程的最佳实践引入数据转换:以 Git 管理 SQL 转换代码(版本控制)、内置数据质量测试框架、自动生成可搜索的数据字典、通过 ref 和宏实现可复用 SQL、自动解析依赖并可视化血缘、为数据转换提供 CI/CD 部署能力。
本技能适用于以下场景:为分析和商业智能构建数据转换管道;用模块化、可测试的 SQL 转换构建数据仓库;实现 ELT(抽取、加载、转换)工作流;为分析开发维度模型(事实表、维度表);管理复杂的 SQL 依赖与数据血缘;跨项目创建可复用的数据转换逻辑;测试数据质量并实现数据契约;为数据模型和业务逻辑编写文档;为大数据集构建增量模型;用 Airflow、Dagster 或 dbt Cloud 等工具编排 dbt;将遗留 ETL 流程迁移到现代 ELT 架构;为分析团队落地 DataOps 实践。
主要能力
核心实体:模型(定义数据转换的 SQL SELECT 语句)、来源(仓库中的原始数据表)、种子(加载进仓库的 CSV 文件)、测试(数据质量断言)、宏(可复用的 Jinja-SQL 函数)、快照(类型 2 缓慢变化维度捕获)、暴露(dbt 模型的下游使用,如仪表盘、机器学习模型)、指标(业务指标定义)。
模型开发:模型是保存为 .sql 文件的 SELECT 语句,只包含 SELECT(不含 DDL),推荐用 CTE 提升可读性,通过 {{ source() }} 引用来源,由 dbt 根据物化方式处理 CREATE/INSERT 逻辑。{{ ref() }} 用于引用其他模型,可自动构建依赖图、解析正确的 schema/database、支持在不影响生产的情况下于开发环境测试,并驱动血缘可视化。{{ source() }} 用于定义和引用原始数据源,支持文档化原始表、测试源数据质量、通过 freshness 配置跟踪新鲜度。
模型组织:推荐目录结构为 staging(与源表一一对应,前缀 stg_)、intermediate(专用转换,不暴露给最终用户,前缀 int_)、marts(业务定义的实体,事实表前缀 fct_、维度表前缀 dim_)。
物化方式:view(默认,轻量不存数据,每次访问时运行查询,适合小数据集、低频查询,构建快查询慢);table(每次运行全量重建,数据物理存储,适合中小数据集、高频查询,构建慢查询快);incremental(后续运行只处理新数据,首次运行构建全表,适合大数据集、事件/时间序列数据,增量构建快并保留历史数据);ephemeral(不在仓库中构建,作为 CTE 插入依赖模型,适合轻量转换、避免视图泛滥)。增量策略包括 append(仅追加新行)、merge(基于 unique_key 做 upsert)、delete+insert(删除匹配记录再插入新记录)。
测试:内置通用测试包括 unique(无重复值)、not_null(无空值)、accepted_values(值在指定列表内)、relationships(外键校验)。自定义数据测试放在 tests/ 目录,测试查询返回任何行即失败,因此查询应返回失败记录。可结合 dbt_utils 包使用 unique_combination_of_columns、sequential_values、not_null_proportion 等测试。测试支持 severity 级别(error 使构建失败、warn 仅警告)。
文档:在 YAML 中为模型和列编写描述,支持 Markdown 格式;可用文档块({% docs %})创建可复用文档并通过 {{ doc() }} 引用。执行 dbt docs generate 生成文档站点,dbt docs serve 本地预览,提供交互式血缘图(DAG 可视化)、可搜索模型目录、列级文档、来源新鲜度跟踪、测试覆盖可见性和编译后 SQL 预览。
增量模型:通过 is_incremental() 判断是否为首次运行之后的增量执行,{{ this }} 引用当前模型的表,unique_key 指定去重列。merge 策略支持 merge_update_columns 和 merge_exclude_columns 指定更新/排除列,适合缓慢变化数据和历史记录更新;delete+insert 适合聚合数据和整分区替换,批量更新时比 merge 更高效。可通过回看窗口(如 order_date >= max(order_date) - interval '3 days')处理迟到数据。
使用方式
dbt 工作流为:开发(编写 SQL SELECT 作为模型)→ 测试(定义数据质量测试)→ 文档(添加描述和元数据)→ 构建(dbt run 编译并执行模型)→ 测试(dbt test 验证数据质量)→ 部署(CI/CD 管道部署到生产)。文档生成使用 dbt docs generate 与 dbt docs serve --port 8001,可在 http://localhost:8001 查看。
适用场景
适合分析工程团队构建数据仓库转换层、实现 ELT 与维度建模、管理 SQL 依赖与血缘、落地数据质量测试与数据契约、为大数据集做增量处理,以及将遗留 ETL 迁移到现代 ELT 架构。
限制
资料未提供 dbt 的收费、价格、平台支持范围、性能基准或具体版本要求等信息,这些内容暂未提供。