mcpField
D
dbt

dbt

github.com/alphaonedev数据与数据库48 次安装
代码仓库

关于 dbt

dbt 是面向数据开发者的命令行工具,用 SQL 模型转换数据仓库中的数据,并支持测试、文档生成、增量处理和可复用宏。

主要功能

  1. 01使用 Jinja 编写 SQL 模型
  2. 02模式检查与自定义测试
  3. 03生成模型文档
  4. 04增量数据处理
  5. 05可复用宏与包
  6. 06配置数据仓库连接

适用场景

  1. 01构建数据仓库转换模型
  2. 02仅加载新增记录
  3. 03检查模型中的空值或重复项
  4. 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 进行测试。

具体使用示例

  1. 构建简单的增量模型:创建 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。此操作仅处理新增订单。

  2. 运行并测试数据模型:在 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 集群中的数据管道集成。

评论

支持 Markdown