关于 dbt
dbt 是面向数据开发者的命令行工具,用 SQL 模型转换数据仓库中的数据,并支持测试、文档生成、增量处理和可复用宏。
主要功能
- 01使用 Jinja 编写 SQL 模型
- 02模式检查与自定义测试
- 03生成模型文档
- 04增量数据处理
- 05可复用宏与包
- 06配置数据仓库连接
适用场景
- 01构建数据仓库转换模型
- 02仅加载新增记录
- 03检查模型中的空值或重复项
- 04生成依赖关系文档
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill dbt安装后在 Claude Code 中输入/dbt确认已加载。
详细介绍
用途
dbt(data build tool)是一款命令行工具,可使用基于 SQL 的模型转换数据仓库中的数据。它使开发者能够编写、测试和记录数据转换,确保 ETL 流程可靠。
适用场景
在 Snowflake、BigQuery 或 Redshift 等数据仓库中构建 SQL 数据模型时使用 dbt。可将其用于数据管道中的增量数据加载、架构演进或自动化测试。实时处理或非 SQL 数据源不适合使用 dbt;当需要带内置验证、受版本控制的 SQL 代码时,可选择 dbt。
核心功能
- 在 .sql 文件中定义可复用的 SQL 模型,并使用 Jinja 模板生成动态查询(例如,使用
{{ var('date') }}注入参数)。 - 通过 YAML 配置运行自动化测试,例如架构检查或自定义断言(例如,
not_null或unique测试)。 - 使用
dbt docs generate根据模型自动生成文档,输出包含模型依赖关系和描述的 HTML。 - 使用
is_incremental()宏处理增量模型,仅处理新数据,从而减少数据仓库负载。 - 通过 dbt hub 支持宏和包,以扩展功能,例如添加实用函数。
使用模式
遵循以下工作流:1)使用 dbt init 初始化项目。2)在 models/ 目录中以 SQL 文件形式编写模型。3)在 profiles.yml 中配置连接。4)迭代运行并测试模型。5)使用 seeds 处理静态数据,使用 snapshots 处理缓慢变化维度。对于 CI/CD,将 dbt 集成到脚本中:在挂载卷的 Docker 容器中运行 dbt run。始终指定 --target dev 等目标来切换环境。
常用命令/API
dbt 主要通过 CLI 使用;可直接使用,也可通过脚本调用。常用命令:
-
dbt init --name project_name:创建新项目;使用--project-dir /path指定目录。示例:
dbt init --name sales_dbt --project-dir ./sales_project -
dbt run --models model_name --select tag:nightly:执行模型;使用--full-refresh重建所有数据。示例:
dbt run --models orders --target prod --threads 8 -
dbt test --models model_name:运行测试;添加--store-failures等标志来记录错误。示例:
dbt test --select source:raw_data -
dbt docs generate && dbt docs serve:构建并提供文档;与 CI 集成以自动部署。 -
如需类似 API 的用法,可使用 subprocess 在 Python 脚本中封装 dbt:
subprocess.run(['dbt', 'run', '--models', 'my_model'])。使用环境变量指定 profiles,例如将$DBT_PROFILES_DIR设置为/path/to/profiles.yml。
集成说明
通过配置 profiles.yml 将 dbt 与数据仓库集成。对于 Snowflake,使用:
your_profile:
target: dev
outputs:
dev:
type: snowflake
account: your_account
user: your_user
password: "{{ env_var('SNOWFLAKE_PASSWORD') }}"
database: your_db
schema: your_schema
对于 BigQuery,指定:
bigquery_profile:
target: dev
outputs:
dev:
type: bigquery
method: service-account
project: your-gcp-project
dataset: your_dataset
keyfile: "{{ env_var('GOOGLE_KEYFILE') }}"
使用环境变量存储密钥(例如,export SNOWFLAKE_PASSWORD=your_key)。使用 Git 进行版本控制,并使用 Airflow 等工具进行编排:将 dbt run 作为任务调用。对于 VS Code,安装 dbt 扩展以启用语法高亮。
错误处理
首先运行 dbt debug 验证连接和 profiles,以处理错误。对于 SQL 编译错误,检查模型文件的语法(例如,是否缺少分号),并使用 dbt compile 预览。如果测试失败,检查输出日志中的详细信息,例如“找不到列”;通过更新 .yml 文件中的架构进行修复。在 dbt run 中使用 --fail-fast,在遇到首个错误时停止。常见做法:在脚本中用 try-catch 包装命令(例如,在 Python 中:try: subprocess.run(['dbt', 'run']) except Exception as e: log_error(e))。如果身份验证失败,请确保已设置 $SNOWFLAKE_PASSWORD 等环境变量;使用 dbt run --target dev --log-level debug 进行测试。
具体使用示例
-
构建简单的增量模型:创建
models/orders.sql,内容如下:{{ config(materialized='incremental') }} select order_id, customer_id from source_orders where order_date > (select max(order_date) from {{ this }})然后运行:
dbt run --models orders --target dev。此操作仅处理新增订单。 -
运行并测试数据模型:在
models/schema.yml中定义测试:models: - name: customers columns: - name: customer_id tests: - unique - not_null执行:
dbt run --models customers && dbt test --models customers。此操作会构建模型,并验证不存在重复值或空值。
图关系
- 集群:data-engineering(关联 SQL 和 ETL 工具等技能)。
- 标签:dbt、sql、data-modeling(关联其他技能中的相关标签,例如用于查询优化的 SQL)。
- 关系:依赖数据仓库连接器;与 data-engineering 集群中的数据管道集成。