案例研習:使用 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 建立電商資料模型