dbt プロジェクトのセットアップとデータの読み込み

ケーススタディ: dbt で構築する Eコマースのデータモデル

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 で構築する Eコマースのデータモデル

データに慣れる: 配送拠点

  • distribution_centers.csv は小規模かつ静的で、行数は10件のみ

  • 生の distribution_centers.csv データのサンプル

配送拠点データのプレビュー。3行のデータと4列を含む。列名は id、name、latitude、longitude。

  • id: 各配送拠点の一意識別子
  • name: 配送拠点名
  • latitude: 配送拠点の緯度
  • longitude: 配送拠点の経度
ケーススタディ: dbt で構築する Eコマースのデータモデル

データに慣れる: orders

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 で構築する Eコマースのデータモデル

データに慣れる: orders

生の orders.csv データのサンプル:

注文データのプレビュー。2行のデータと9列を含む。列名は order id、user id、status、gender、created at、returned at、shipped at、delivered at、num of items。

ケーススタディ: dbt で構築する Eコマースのデータモデル

生データソースと seed データソースの設定

Distribution center の生データファイル:

  • データの特性:
    • 小規模のフラットファイル(csv)
    • 変化が遅いデータ

Orders の生データファイル:

  • データの特性:
    • 大規模データセット
    • 変化が速いデータ
  • dbt の読み込み方法:
    • dbt seed
    • 一度だけファイルとして読み込み
  • dbt の読み込み方法:
    • dbt source
    • DuckDB へのコネクタ
ケーススタディ: dbt で構築する Eコマースのデータモデル

生ソースと seed データソースの設定

dbt init は基本的なファイル構成を自動生成します:

looker_ecommerce/
  macros/
  models/
  seeds/
  snapshots/
  tests/
  dbt_project.yml
ケーススタディ: dbt で構築する Eコマースのデータモデル

生データソースと seed データソースの設定

distribution_centerseed として読み込み:

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 で構築する Eコマースのデータモデル

生データソースと seed データソースの設定

orderssource として読み込み:

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 で構築する Eコマースのデータモデル

ソースとステージングモデルのドキュメント化

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 で構築する Eコマースのデータモデル

ソースとステージングモデルのドキュメント化

  • 同じ models ディレクトリ配下のサンプル _looker__models.yml ファイル:
version: 2

models:
  - name: stg_looker__distribution_centers
    description: 配送拠点の名称と位置

  - name: stg_looker__orders
    description: 注文状況などの注文情報
ケーススタディ: dbt で構築する Eコマースのデータモデル

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 で構築する Eコマースのデータモデル

復習: dbt のサブコマンド

csv を seed ファイルとして読み込み

dbt seed

dbt プロジェクト内の全モデルを作成/更新

dbt run

指定モデルのみ作成/更新

dbt run --select model

プロジェクト内の全テストを実行

dbt test 

指定モデルのテストを実行

dbt test --select model

dbt rundbt test を一括実行

dbt build
dbt build --select model
ケーススタディ: dbt で構築する Eコマースのデータモデル

復習: ベストプラクティス集

models の命名規則:

  • データソース名とモデル名の区切りに二重アンダースコアを使用
  • <data_source>__<model_name>.sql

e.g.

  • stg_looker__distribution_centers.sql
  • stg_looker__orders.sql

yaml の命名規則:

  • 先頭は単一のアンダースコア
  • データソース名とアーティファクト名の区切りに二重アンダースコアを使用
  • _<data_source>__<artifact_type>.yml

e.g.

  • _looker__models.yml
  • _looker__sources.yml
1 https://docs.getdbt.com/best-practices
ケーススタディ: dbt で構築する Eコマースのデータモデル

Ayo berlatih!

ケーススタディ: dbt で構築する Eコマースのデータモデル

Preparing Video For Download...