dbt-transformation-patterns は何をしますか?
分析エンジニアリングのためのdbt(データビルドツール)を習得し、モデル構成、テスト、ドキュメント作成、インクリメンタル戦略を実践します。データ変換の構築、データモデルの作成、または分析エンジニアリングのベストプラクティスの実装時に使用します。
モデル組織化
dbtプロジェクトでは、モデルを明確に整理することが重要です。以下のディレクトリ構造を推奨します:
models/
├── staging/
│ ├── schema.yml
│ └── stg_customers.sql
├── marts/
│ ├── core/
│ │ ├── schema.yml
│ │ └── dim_customers.sql
│ └── finance/
│ ├── schema.yml
│ └── fct_orders.sql
└── intermediate/
├── schema.yml
└── int_order_items_pivoted.sql
命名規則
- ステージングモデル:
stg_[source]_[entity](例:stg_jaffle_shop_customers) - 中間モデル:
int_[entity]_[description](例:int_order_items_pivoted) - マートモデル:
- ディメンション:
dim_[entity](例:dim_customers) - ファクト:
fct_[entity](例:fct_orders)
- ディメンション:
テスト
dbtのテストフレームワークを使用してデータ品質を確保します。
汎用テスト(schema.ymlで定義)
version: 2
models:
- name: dim_customers
columns:
- name: customer_id
tests:
- unique
- not_null
- name: status
tests:
- accepted_values:
values: ['active', 'churned', 'pending']
シングルテスト(カスタムSQLテスト)
tests/ディレクトリにSQLファイルを作成:
-- tests/assert_total_revenue_positive.sql
select *
from {{ ref('fct_orders') }}
where total_amount < 0
ドキュメント作成
schema.ymlファイルに説明を追加してドキュメントを生成します。
version: 2
models:
- name: dim_customers
description: 顧客のディメンションテーブル。各顧客の一意のレコードとその属性を含む。
columns:
- name: customer_id
description: 顧客の一意識別子
tests:
- unique
- not_null
ドキュメントサイトを生成するには、以下を実行:
dbt docs generate
dbt docs serve
インクリメンタル戦略
大規模データセットを効率的に処理するには、インクリメンタルモデルを使用します。
例:タイムスタンプベースのインクリメンタルモデル
{{ config(
materialized='incremental',
unique_key='order_id',
incremental_strategy='timestamp',
updated_at='order_date'
) }}
select *
from {{ ref('stg_orders') }}
{% if is_incremental() %}
where order_date > (select max(order_date) from {{ this }})
{% endif %}
例:マージ戦略を使用したインクリメンタルモデル
{{ config(
materialized='incremental',
unique_key=['customer_id', 'effective_date'],
incremental_strategy='delete+insert'
) }}
select *
from {{ ref('stg_customer_updates') }}
ベストプラクティス
- ソースデータを常にステージングモデルでラップする: ソースデータは
{{ source('source_name', 'table_name') }}を使用して参照します。 - モデルをテストする: 少なくとも一意性と非NULL制約をテストします。
- ドキュメントを作成する: 各モデルとカラムに説明を追加します。
- インクリメンタルモデルを賢く使う: 定義が複雑になるため、必要な場合のみインクリメンタル戦略を使用します。
- 環境を分離する: 開発、ステージング、本番環境用に異なるターゲットスキーマ/データセットを使用します。
- コードレビューを実施する: プルリクエストを通じてdbtの変更をレビューします。
- dbtプロジェクトをバージョン管理する: すべてのコードをGitで管理します。
サポート対象プラットフォーム
このスキルは、Snowflake、BigQuery、Redshift、Databricksなど、dbtをサポートするすべての主要なデータウェアハウスプラットフォームで動作します。dbt Cloud と dbt Core の両方の環境で使用可能です。