0Pricing
SQL Academy · レッスン

DBT(Data Build Tool)の基礎

refs、sources、増分モデルを使い、dbtでSELECT文としてウェアハウスデータをモデル化します。

「DBT(Data Build Tool)の基礎」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

dbtとは

dbtはELTにおける「T」です。SELECT文を使って、データウェアハウス内でデータを変換します。モデル(SELECT文)を定義すると、dbtがそれらをテーブルまたはビューとしてマテリアライズし、依存関係を管理してテストを実行します。

dbtを使う理由

dbt以前は、変換処理がアドホックなSQLスクリプト、ストアドプロシージャ、またはPythonジョブに分散していました。dbtは次のものを提供します:

  • Gitでバージョン管理する、モジュール化されたSQLコード
  • 手動の実行順序に代わる依存関係グラフ(ref())
  • 第一級オブジェクトとしてのテスト
  • ドキュメントの生成

プロジェクト構成

dbtプロジェクト:

my_project/
  dbt_project.yml
  models/
    staging/
      stg_orders.sql
    marts/
      fct_revenue.sql
  tests/
  seeds/
  macros/

モデルファイル

.sqlファイルに記述したSELECTだけです:

-- models/staging/stg_orders.sql
{{ config(materialized='view') }}
SELECT
  id,
  user_id,
  total,
  created_at
FROM {{ source('raw', 'orders') }}

マテリアライゼーションの種類

  • view — dbtがVIEWを作成します。更新は速い一方、クエリは遅くなります
  • table — 完全なテーブルです。実行のたびに再構築されます
  • incremental — 新しい行だけを追加します
  • ephemeral — インライン化されたCTEで、データベースオブジェクトは作成されません

ref()と依存関係

あるモデルを別のモデルから参照します:

-- models/marts/fct_revenue.sql
SELECT
  date_trunc('day', created_at) AS day,
  SUM(total) AS revenue
FROM {{ ref('stg_orders') }}
GROUP BY 1

dbtを実行する

プロジェクト全体をビルドします:

dbt run                    # build all models
dbt run --select staging   # subset
dbt run --select +fct_revenue   # this model and upstream
dbt build                   # run + test

ソース

ソースを使って、生のテーブルをドキュメント化し、参照します:

# models/sources.yml
sources:
  - name: raw
    database: warehouse
    tables:
      - name: orders

増分モデル

巨大なファクトテーブル向けです:

{{ config(materialized='incremental', unique_key='id') }}
SELECT *
FROM {{ source('raw','orders') }}
{% if is_incremental() %}
  WHERE created_at > (SELECT MAX(created_at) FROM {{ this }})
{% endif %}

Jinjaテンプレート

dbtはSQL + Jinjaで構成されているため、ループや条件分岐によってSQLを生成できます:

{% set tiers = ['free','pro','enterprise'] %}
SELECT user_id,
{% for t in tiers %}
  COUNT(*) FILTER (WHERE tier = '{{ t }}') AS {{ t }}_count {% if not loop.last %},{% endif %}
{% endfor %}
FROM users GROUP BY user_id

スナップショット

緩やかに変化するディメンションを自動的に取得します:

{% snapshot user_snapshot %}
  {{ config(
    target_schema='snapshots',
    unique_key='id',
    strategy='timestamp',
    updated_at='updated_at',
  ) }}
  SELECT * FROM {{ source('raw','users') }}
{% endsnapshot %}

ドキュメント

モデルとYAMLの説明から、閲覧可能なドキュメントを自動生成します:

dbt docs generate
dbt docs serve     # opens browser

まとめ

dbtはデータ変換をSQLコードとしてモデル化します。

  • モデル = .sqlファイル内のSELECT
  • ref()がDAGを構築する
  • マテリアライゼーション: view / table / incremental / ephemeral
  • テストとドキュメントを第一級の要素として扱う

確認問題

dbtの{{ ref('stg_orders') }}は何をしますか。

よくある質問

「DBT(Data Build Tool)の基礎」レッスンは無料ですか?

はい。「DBT(Data Build Tool)の基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「DBT(Data Build Tool)の基礎」で何を学びますか?

refs、sources、増分モデルを使い、dbtでSELECT文としてウェアハウスデータをモデル化します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「DBT(Data Build Tool)の基礎」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. DBT(Data Build Tool)の基礎
  2. SQLFluffとリンティング
  3. SQLのテスト:dbt tests、Great Expectations
  4. スキーマ変更のCI(GitHub Actions)
← SQL Academyに戻る