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 1dbtを実行する
プロジェクト全体をビルドします:
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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- DBT(Data Build Tool)の基礎
- SQLFluffとリンティング
- SQLのテスト:dbt tests、Great Expectations
- スキーマ変更のCI(GitHub Actions)