案例研究:使用 dbt 构建电商数据模型
Susan Sun
Freelance Data Scientist
安装 dbt
pip install dbt
初始化 dbt 项目 looker_ecommerce
dbt init looker_ecommerce
验证安装成功
cd looker_ecommerce
dbt debug
dbt 自动生成的目录:

distribution_centers.csv 体量小且静态,仅 10 行
原始 distribution_centers.csv 示例

orders.csv 体量大且持续更新,含 125,000 行、9 列
原始 orders.csv 示例:

"配送中心"原始数据文件:
"订单"原始数据文件:
dbt seeddbt sourcedbt init 会自动生成基础文件结构:
looker_ecommerce/
macros/
models/
seeds/
snapshots/
tests/
dbt_project.yml
将 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')}}
将 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')}}
为 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
models 目录下示例 _looker__models.yml 文件:version: 2
models:
- name: stg_looker__distribution_centers
description: 配送中心名称与位置
- name: stg_looker__orders
description: 订单信息(如订单状态)
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
将 csv 加载为 seed 文件
dbt seed
创建或更新项目中所有模型
dbt run
创建或更新指定模型
dbt run --select model
运行项目中所有测试
dbt test
仅运行指定模型的测试
dbt test --select model
一次执行 dbt run 与 dbt test
dbt build
dbt build --select model
模型命名结构:
<data_source>__<model_name>.sql例如
stg_looker__distribution_centers.sqlstg_looker__orders.sqlyaml 文件命名结构:
_<data_source>__<artifact_type>.yml例如
_looker__models.yml_looker__sources.yml案例研究:使用 dbt 构建电商数据模型