設定 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 建立電商資料模型

設定原始來源與 seed 資料來源

配送中心 原始資料檔:

  • 資料特性:
    • 小型、扁平檔(csv)
    • 變動緩慢

訂單 原始資料檔:

  • 資料特性:
    • 大型資料集
    • 變動快速
  • dbt 載入方式:
    • dbt seed
    • 一次性載入檔案
  • dbt 載入方式:
    • dbt source
    • 連接至 DuckDB
案例研習:使用 dbt 建立電商資料模型

設定原始來源與 seed 資料來源

dbt init 會自動產生基本檔案結構:

looker_ecommerce/
  macros/
  models/
  seeds/
  snapshots/
  tests/
  dbt_project.yml
案例研習:使用 dbt 建立電商資料模型

設定原始來源與 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 建立電商資料模型

設定原始來源與 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 文件:

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 建立電商資料模型

撰寫來源與前置模型文件

  • 位於相同 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 建立電商資料模型

一起來練習吧!

案例研習:使用 dbt 建立電商資料模型

Preparing Video For Download...