dbt での Jinja の導入

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

Susan Sun

Freelance Data Scientist

dbt は3つの言語を使用

dbt は3つの言語を使います:

  • 変換処理に SQL
  • ドキュメント化とテストに YAML
  • テンプレートに Jinja
  • SQL の例:

    SELECT * FROM ...
    
  • YAML の例:

    - name: customers
      description: A data mart
    
  • Jinja の例:

    FROM {{ ref('stg_looker__users') }}
    
ケーススタディ: dbt で構築する Eコマースのデータモデル

dbt の Jinja とは

dbt の Jinja とは?

  • Python 風のテンプレート言語
  • 動的な SQL 生成に使用
  • モデル、マクロ、テストなどで利用

なぜ有用か

  • コラボレーションを強化
  • 繰り返しを削減(DRY)、再利用性向上

dbt における Jinja の例:

  • dbt モデルの参照

    SELECT *
    FROM {{ ref('stg_looker__users') }}
    
  • ループの作成

    {% for column in ['col1', 'col2'] %}
      SELECT {{ column }}
      FROM table_name
    {% endfor %}
    
ケーススタディ: dbt で構築する Eコマースのデータモデル

dbt Jinja の種類

  1. Jinja のステートメント{%...%} で囲む
     {% set order_statuses = ['Shipped', 'Complete', 'Processing'] %}
    
  2. Jinja の{{...}} で囲む
     SELECT * FROM {{ ref('stg_looker__users') }}
    
  3. Jinja のコメント{# #} で囲む
     {# This is a comment #}
    
ケーススタディ: dbt で構築する Eコマースのデータモデル

Jinja ステートメント: set

  • Jinja ステートメントの種類: set, loop, conditional (if/else), macros など

  • set ステートメントは変数を作成して値を代入

    • テンプレート:
      {% set ... %}
      
    • 例:
      {% set country = 'Australia' %}
      
ケーススタディ: dbt で構築する Eコマースのデータモデル

Jinja と dbt compile

使用例

  • customers.sql 内の記述例:
{% set country = 'Australia' %}

SELECT ...
FROM ...
WHERE country = '{{ country }}'

コンパイル後のコード

  • dbt compile -s customers.sql の出力:


SELECT ...
FROM ...
WHERE country = 'Australia'

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

Jinja と dbt compile

  • 単一モデルのターミナル出力
  • dbt compile -s customers.sql の出力:
Running with dbt=1.8.4
...
Compiled node 'customers' is:
WITH customer_base AS (
    SELECT 
...
    FROM "dbt"."main"."stg_looker__users"
    WHERE country = 'Australia'
)
...
  • 生成される /target/compiled ディレクトリ
  • dbt compile によりコンパイル済みファイルが作成:

dbt compile サブコマンドで自動生成されたディレクトリ構成のスクリーンショット。最上位は looker ecommerce の dbt プロジェクト。第2階層は `target`、第3階層は `compiled`。`compiled` 配下に、モデルやテストのコンパイル済みクエリがプロジェクト構成を模して配置されている。

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

Ayo berlatih!

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

Preparing Video For Download...