设置 dbt 项目并加载数据

案例研究:使用 dbt 构建电商数据模型

Susan Sun

Freelance Data Scientist

复习:dbt 安装与初始化

安装 dbt

pip install dbt

初始化 dbt 项目 looker_ecommerce

dbt init looker_ecommerce

验证安装成功

cd looker_ecommerce
dbt debug

dbt 自动生成的目录:

上一课截图的重复。展示由 dbt init 自动生成的目录结构。顶层文件夹为 looker e-commerce。子文件夹为 analyses、macros、models、seeds、snapshots、tests。还有 gitignore、dbt project yaml、readme markdown 三个文件。

案例研究:使用 dbt 构建电商数据模型

熟悉数据:配送中心

  • distribution_centers.csv 体量小且静态,仅 10 行

  • 原始 distribution_centers.csv 示例

配送中心数据文件预览,含 3 行数据与 4 列。列名为 id、name、latitude、longitude。

  • id:每个配送中心的唯一标识
  • name:配送中心名称
  • latitude:配送中心纬度
  • longitude:配送中心经度
案例研究:使用 dbt 构建电商数据模型

熟悉数据:订单

orders.csv 体量大且持续更新,含 125,000 行、9 列

  • order_id:每个订单项的唯一 ID
  • user_id:下单用户的 ID
  • status:订单状态
  • gender:用户性别
  • created_at:下单时间戳
  • returned_at:退货时间戳
  • shipped_at:发货时间戳
  • delivered_at:送达时间戳
  • num_of_items:订单商品数量
案例研究:使用 dbt 构建电商数据模型

熟悉数据:订单

原始 orders.csv 示例:

订单数据文件预览,含 2 行数据与 9 列。列名为 order id、user id、status、gender、created at、returned at、shipped at、delivered at、num of items。

案例研究:使用 dbt 构建电商数据模型

配置原始 source 与 seed 数据源

"配送中心"原始数据文件:

  • 数据特性:
    • 小型、平面文件(csv)
    • 缓慢变化数据

"订单"原始数据文件:

  • 数据特性:
    • 数据量大
    • 快速变化数据
  • dbt 加载方式:
    • dbt seed
    • 作为一次性文件加载
  • dbt 加载方式:
    • dbt source
    • 连接 DuckDB 的连接器
案例研究:使用 dbt 构建电商数据模型

配置原始 sources 与 seed 数据源

dbt init 会自动生成基础文件结构:

looker_ecommerce/
  macros/
  models/
  seeds/
  snapshots/
  tests/
  dbt_project.yml
案例研究:使用 dbt 构建电商数据模型

配置原始 source 与 seed 数据源

distribution_center 作为 seed 加载:

looker_ecommerce/
  macros/
  models/
    stg_looker__distribution_centers.sql
  seeds/
    looker__distribution_centers.csv
  snapshots/
  tests/
  dbt_project.yml

stg_looker__distribution_centers.sql 中:

SELECT 
  id,
  name,
  latitude,
  longitude
FROM 
 {{ref('looker__distribution_centers')}}
案例研究:使用 dbt 构建电商数据模型

配置原始 source 与 seed 数据源

orders 作为 source 加载:

looker_ecommerce/
  macros/
  models/
    stg_looker__orders.sql
  seeds/
  snapshots/
  tests/
  dbt_project.yml

stg_looker__orders.sql 中:

SELECT *
FROM 
{{source('looker_ecommerce', 'orders')}}
案例研究:使用 dbt 构建电商数据模型

为 sources 与分层模型编写文档

sources 编写文档:

looker_ecommerce/
  macros/
  models/
    _looker__sources.yml
  seeds/
  snapshots/
  tests/
  dbt_project.yml

_looker__sources.yml 中:

version: 2

sources:
  - name: looker_ecommerce
    tables:
      - name: orders
案例研究:使用 dbt 构建电商数据模型

为 sources 与分层模型编写文档

  • models 目录下示例 _looker__models.yml 文件:
version: 2

models:
  - name: stg_looker__distribution_centers
    description: 配送中心名称与位置    

  - name: stg_looker__orders
    description: 订单信息(如订单状态)
案例研究:使用 dbt 构建电商数据模型

Sources、seeds、models 与 yaml

looker_ecommerce/
  macros/
  models/
    _looker__models.yml
    _looker__sources.yml
    stg_looker__distribution_centers.sql
    stg_looker__orders.sql
  seeds/
    looker__distribution_centers.csv
  snapshots/
  tests/
  dbt_project.yml
案例研究:使用 dbt 构建电商数据模型

复习:dbt 子命令

将 csv 加载为 seed 文件

dbt seed

创建或更新项目中所有模型

dbt run

创建或更新指定模型

dbt run --select model

运行项目中所有测试

dbt test 

仅运行指定模型的测试

dbt test --select model

一次执行 dbt rundbt test

dbt build
dbt build --select model
案例研究:使用 dbt 构建电商数据模型

复习:最佳实践指南

模型命名结构:

  • 使用双下划线分隔数据源名与模型名
  • <data_source>__<model_name>.sql

例如

  • stg_looker__distribution_centers.sql
  • stg_looker__orders.sql

yaml 文件命名结构:

  • 以单下划线开头
  • 使用双下划线分隔数据源名与工件名
  • _<data_source>__<artifact_type>.yml

例如

  • _looker__models.yml
  • _looker__sources.yml
1 https://docs.getdbt.com/best-practices
案例研究:使用 dbt 构建电商数据模型

Passons à la pratique !

案例研究:使用 dbt 构建电商数据模型

Preparing Video For Download...