Text⭐さぁ、手を動かすのだ⭐
この章の内容は、まだ更新中です。
Chapter 4: dbtモデルの開発
この章では、個人の金融取引データを使ってdbtモデルを作成し、データ変換の基本的な処理を学びます。 複数のCSVデータソースをロードし、クリーニング、統合して、分析用のデータマートを構築するまでを実践していきます。
主な学習内容
- dbtプロジェクトの初期化と構造の理解
- 複数のCSVデータの準備とSnowflakeへのロード
- ソーステーブルの定義
- ステージングモデルの作成(データクリーニングと整形)
- マートモデルの作成(複数データソースの統合と集計)
- モデル間の依存関係の構築(ref関数)
- dbtコマンドの実行とテスト
dbtモデリングの基本概念
dbtでは、SQLファイルがモデルとなり、各モデルはSnowflakeのテーブルやビューとして実体化されます。 ソース → ステージング → マート の3層アーキテクチャを採用することで、 保守性と再利用性の高いデータパイプラインを構築できます。
手順1: dbtプロジェクトの初期化
まず、新しいdbtプロジェクトを作成し、基本的な設定を行います。
dbtプロジェクト初期化
プロジェクトが作成されると、以下のような構造になります:
dbtプロジェクト構造
手順2: サンプルデータの準備
データ変換の練習用に、個人の金融取引に関する4種類のサンプルCSVデータを使用します。 銀行の入出金、クレジットカードの明細、Suicaの利用履歴、そして家計簿アプリのデータです。
まず、これらのCSVファイルをダウンロードします。(ファイルのダウンロードURLは後ほどこちらで設定します。) ダウンロード後、Snowflakeにデータをロードします。
サンプルテーブル作成
テーブルを作成したら、SnowsightのUIを使って、ダウンロードした各CSVファイルを対応するテーブルにロードしてください。 ファイル形式はヘッダーが1行あるCSVです。
手順3: ソーステーブルの定義
dbtでソーステーブル(生データ)を定義し、モデルから参照できるようにします。
ソース定義ファイル作成
手順4: ステージングモデルの作成
生データを正規化・クリーニングするステージングモデルを作成します。 ここではカラム名を日本語から英語に変換し、簡単なデータ整形を行います。
ステージングモデル作成
手順5: マートモデルの作成
ビジネス価値のあるデータマートを作成します。ここでは、すべての取引を統合したファクトテーブルと、月次の財務サマリテーブルを作成します。
マートモデル作成
手順6: dbtモデルの実行とテスト
作成したモデルを実行し、正常に動作することを確認します。
dbtコマンド実行
実行成功の確認
dbt runが成功すると、Snowflakeに以下のテーブル・ビューが作成されます:
✓ ステージングビュー:stg_bank_transactions, stg_credit_card_transactions, stg_suica_transactions, stg_kakeibo_transactions
✓ マートテーブル:fct_transactions, monthly_summary
SnowflakeのWebUIで作成されたオブジェクトを確認してみてください。
✓ ステージングビュー:stg_bank_transactions, stg_credit_card_transactions, stg_suica_transactions, stg_kakeibo_transactions
✓ マートテーブル:fct_transactions, monthly_summary
SnowflakeのWebUIで作成されたオブジェクトを確認してみてください。
手順7: 結果の確認
作成したモデルがSnowflakeで正常に動作していることを確認します。
結果確認クエリ
dbtモデリングのベストプラクティス
• 命名規則: ステージング(stg_)、マート(fct_, dim_)のプレフィックス
• レイヤー構造: ソース → ステージング → マート の3層アーキテクチャ
• 再利用性: ref()関数でモデル間の依存関係を明確に
• テスト: 一意性、NOT NULL、参照整合性のテスト実装
• ドキュメント: YAMLファイルでメタデータとテストを管理
• レイヤー構造: ソース → ステージング → マート の3層アーキテクチャ
• 再利用性: ref()関数でモデル間の依存関係を明確に
• テスト: 一意性、NOT NULL、参照整合性のテスト実装
• ドキュメント: YAMLファイルでメタデータとテストを管理
Sponsored by
スポンサーを募集中。紹介コンテンツもご用意しますので、ご興味あればお問い合わせください。