器→工具, 开源项目

开源数据转换和建模工具dbt

钱魏Way · · 3 次浏览

dbt简介

dbt (data build tool) 是一个开源的数据转换和建模工具,由 dbt Labs 开发和维护。dbt 旨在简化数据仓库中的数据转换和建模过程,帮助数据工程师和分析师高效地管理和执行数据管道。dbt 核心(dbt-core)是 dbt 的核心组件,提供了基础的功能和架构。

dbt 允许数据分析师和工程师通过编写 SQL 查询和配置文件来定义数据转换逻辑,并自动化这些转换的执行和管理。

项目背景与目的

  • dbt Labs:一家专注于数据工程和数据建模的公司,致力于提供高效、易用的数据工具。
  • dbt:dbt 是一个开源的数据转换和建模工具,旨在简化数据仓库中的数据转换和建模过程。
  • dbt-core:dbt 的核心组件,提供了基础的功能和架构,支持多种数据仓库和数据库。

主要功能与特点

  • 数据建模
    • SQL 优先:dbt 使用标准 SQL 进行数据建模,用户可以通过熟悉的 SQL 语法进行数据转换和建模。
    • 增量加载:支持增量加载,只处理新增或更新的数据,提高数据处理的效率。
    • 数据测试:内置数据测试功能,确保数据的质量和一致性。
  • 版本控制
    • Git 集成:支持 Git 集成,便于团队协作和版本控制。
    • 代码审查:支持代码审查和合并请求,确保数据模型的质量和一致性。
  • 依赖管理
    • 依赖解析:自动解析和管理数据模型之间的依赖关系,确保数据模型的正确执行顺序。
    • 依赖图:生成数据模型的依赖图,帮助用户理解数据模型之间的关系。
  • 文档生成
    • 自动文档:自动生成数据模型的文档,包括数据模型的结构、依赖关系和元数据。
    • 文档站点:支持生成静态文档站点,方便团队成员查阅和参考。
  • 多数据仓库支持:支持多种数据仓库和数据库,包括但不限于:
    • Snowflake
    • BigQuery
    • Redshift
    • PostgreSQL
    • DuckDB
    • 其他数据库:支持更多数据仓库和数据库,通过适配器扩展支持。
  • 插件和扩展
    • 插件系统:支持插件和扩展,用户可以根据需求扩展 dbt 的功能。
    • 社区贡献:活跃的社区贡献了大量的插件和扩展,丰富了 dbt 的生态系统。

使用场景

  • 数据建模:构建和管理数据模型,确保数据的一致性和准确性。
  • 数据转换:对原始数据进行清洗、转换和聚合,准备用于进一步分析或建模。
  • 数据质量检查:通过内置的数据测试功能,确保数据的质量和一致性。
  • 团队协作:支持 Git 集成和代码审查,促进团队协作和代码质量管理。
  • 文档生成:自动生成数据模型的文档,方便团队成员查阅和参考。

dbt 是一个强大的工具,特别适合现代数据堆栈中需要高效管理和转换数据的团队。它的易用性、灵活性和强大的社区支持,使其成为数据工程和分析的热门选择。

Dbt的使用

核心概念

  • Models(模型)
    • 定义:模型是 SQL 文件,定义了如何转换数据。每个模型对应一个数据表或视图。
    • 功能:通过编写 SQL 查询,用户可以指定数据从源表到目标表的转换逻辑。
  • Sources(数据源)
    • 定义:数据源定义了原始数据表的位置和元数据。
    • 功能:帮助用户管理和引用数据仓库中的原始数据表。
  • Tests(测试)
    • 定义:dbt 提供内置测试功能,用于验证数据质量和完整性。
    • 功能:可以定义唯一性、非空、引用完整性等测试,确保数据符合预期。
  • Snapshots(快照)
    • 定义:快照功能用于捕获和记录表中数据的历史变化。
    • 功能:帮助跟踪和审计数据的变化,支持构建时间序列分析。
  • Macros(宏)
    • 定义:宏是可重用的 SQL 代码片段,类似于函数。
    • 功能:通过 Jinja 模板语言定义,帮助减少重复代码和提高代码复用性。
  • Seeds(种子数据)
    • 定义:种子数据是 CSV 文件,dbt 可以将其加载到数据仓库中作为表。
    • 功能:用于加载小型参考数据集,便于数据处理和分析。
  • Documentation(文档)
    • 定义:dbt 可以自动生成数据模型的文档。
    • 功能:通过编写注释和描述,生成数据字典和模型关系图,帮助团队理解数据结构。

工作流程

  • 编写 SQL 模型:数据分析师和工程师编写 SQL 查询定义数据转换逻辑,保存在项目的models 目录中。
  • 配置项目:配置 dbt 项目文件(yml),包括数据库连接、模型配置、测试等。
  • 运行 dbt 命令:使用命令行工具运行 dbt 命令,如dbt run(执行模型)、dbt test(运行测试)、dbt snapshot(创建快照)等。
  • 生成文档:使用dbt docs generate 生成文档,并通过 dbt docs serve 查看项目文档。
  • 持续集成:将 dbt 集成到持续集成/持续部署(CI/CD)管道中,以自动化数据转换和测试。

Dbt的安装

  • 安装 Python:确保系统已安装 Python 3.6 或更高版本。
  • 安装 dbt-core:pip install dbt-core
  • 安装适配器:根据使用的数据仓库安装相应的适配器,例如 Snowflake:pip install dbt-snowflake

Dbt的配置

创建项目

dbt init my_project
cd my_project

配置 profiles.yml:编辑 ~/.dbt/profiles.yml 文件,配置数据仓库的连接信息:

my_project:
  target: dev
  outputs:
    dev:
      type: snowflake
      account: your_account
      user: your_user
      password: your_password
      role: your_role
      database: your_database
      schema: your_schema
      warehouse: your_warehouse

编写模型

创建模型文件:在 models 目录下创建 SQL 文件,定义数据模型。例如,创建 models/example_model.sql:

-- models/example_model.sql
{{ config(materialized='table') }}

SELECT
  id,
  name,
  created_at
FROM
  raw_data.users
WHERE
  created_at >= '2023-01-01'

运行模型

dbt run

测试和文档

编写测试:在 tests 目录下创建测试文件,定义数据测试。例如,创建 tests/not_null_users_id.yml:

version: 2
models:
  - name: example_model
    columns:
      - name: id
        tests:
          - not_null

运行测试

dbt test

生成文档

dbt docs generate
dbt docs serve

参考链接:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注