一分钟运行DBT入门示例项目(Jaffle Shop)
前面写了关于数据分析工程的dbt系列博客,但却没有介绍dbt官方提供的入门示例项目。今天带你完整运行该项目,包括数据源配置、运行dbt相关命令,最后生成项目文档。通过实际项目学习,会加深对dbt理解,也建议你卷起袖子,行动起来。
Jaffle Shop项目介绍
- 什么是dbt?
DBT(数据构建工具)是一个开源命令行工具,可以帮助数据分析师和数据工程师更有效地转换数据仓库中的数据。用户可以编写模块化的SQL查询,执行查询生成数据模型。dbt采用工程化理念,管理数据转换的生命周期,包括模型文档和数据测试等。
- 什么是Jaffle Shop?
Jaffle Shop是一个虚构的电子商务公司,用作演示dbt功能示例教程项目。这个项目是学习dbt的官方入门项目,非常适合初学者。它包括数据建模、数据测试和模型文档编写等内容。本文展示的项目也可以从我的资源中下载。
- 项目结构
├── dbt_packages
├── dbt_project.yml
├── docker-compose.yml
├── profiles.yml
├── requirements.txt
├── models
│ ├── marts
│ │ ├── customers.sql
│ │ ├── docs.md
│ │ ├── orders.sql
│ │ └── schema.yml
│ └── staging
│ ├── schema.yml
│ ├── stg_customers.sql
│ ├── stg_orders.sql
│ └── stg_payments.sql
├── profiles.yml
├── requirements.txt
└── seeds├── raw_customers.csv├── raw_orders.csv└── raw_payments.csv
- models/:包含staging和mart两层的模型文件。
- seeds/: dbt项目中的“seeds”文件夹用于将静态数据加载到数据仓库中。这些数据通常采用CSV文件的形式,通常用于查询字典表、引用数据或其他不经常更改的小型静态数据集。因为该项目是示例,为了简化,我们直接把原始数据以文件方式加载。
- dbt_project.yml:是dbt项目的全局配置文件。
- profiles.yml : 是数据源配置,支持配置多个数据源,如开发环境和生产环境。
- docker-compose.yml :PostgreSql的dockerfile文件,如果你已经安装了数据库,可以忽略。
- requirements.txt : python 包,dbt-core 和 dbt-postgres
环境准备
- 依赖安装
- Git
- Python 3.9 or higher
- Docker Desktop or Docker Compose
- 环境安装
-
直接下载项目,或到官方克隆:git clone
-
进入项目文件夹:
cd jaffle-shop-dbt-demo
-
安装python虚拟环境:
$ python3 -m venv venv
; 激活虚拟环境:$ source venv/bin/activate
-
更新pip:
$ python3 -m pip install - upgrade pip
-
安装依赖:
$ python3 -m pip install -r requirements.txt
-
运行docker:
$ docker compose build $ docker compose up -d
准备就绪,我们开始运行项目,执行dbt相关命令。
运行项目
- 设置数据源,连接数据仓库
jaffle_shop:target: devoutputs:dev:type: postgreshost: localhostuser: dbtpassword: dbtport: 5432dbname: dbtschema: jaffle-shop-classicthreads: 4
- 确保数据连接正确,dbt-core 安装正确:
$ dbt debug
执行后会生成 .user.yml
文件。
- 载入csv文件,即演示数据。下面命令会在target schema中生成表,并加载数据。
注意:实际项目中,通常原始数据通过sources加载,这里仅为了演示方便。
- 下面是剩余依次执行的命令:
$ dbt seed
# 运行模型
$ dbt run
# 测试模型
$ dbt test
# 生成文档
$ dbt docs generate
# 查看文档
$ dbt docs serve
最终生成文档可以在浏览器中查看。示例截图:
可以看到每个模型及其字段信息,每个字段都包括了文档描述信息。还可以看到数据血缘关系。