😎
【dbt Best Practice】How we structure our dbt projects 2023年12月版
がく@ちゅらデータです。
最近、dbtを使っての開発をしていたのですが、やっぱり今一度 Best Practiceを読んでみよう、
特に、SQLの書き方(jinja含めて)でのセオリーを押さえておきたい!
ということで、こちらの公式ドキュメントを読んでみたいと思います。
※開発メンバーにこのあたりのスタイルガイドを把握してもらい、それに沿った開発をチームでやりたい・・・やらないと・・・・というモチベーションです
※テンプレ
今回は、dbt Best Practice の1番目
を読んでいきたいと思います。
dbt プロジェクトの構成はどうしたらいい?
なぜ構造が重要?
フォルダの場所やファイル名の決め方ではなく理解しやすい規範を確立することが極めて重要
dbt Project構成に関する基本原則のひとつは、
「データをソース準拠から ビジネス準拠へ変換していく」
- ソース準拠のデータは、コントロールできない外部システムによって生成される
- ビジネス準拠のデータは、もらったデータをもとに、検討し、作成したニーズ、コンセプト、定義で変換する
プロジェクト内でどのようなパターンや規約を定義したとしても、このプロセスがデータ変換な目的であることに変わりはない
学習
このガイドの目的は主に3つ
- 典型的なdbtプロジェクトの構成方法の最新推奨事項を網羅
- これらの推奨事項を包括的な例で説明する
- 各段階で、なぜそのアプローチを推奨するか?の説明をして、組織でカスタマイズする際にどこをやれるのか?あたりを判断できるようにする
このガイドを読めば、dbtプロジェクトの構成要素がどうなっているか?深く理解して、アナリティクスエンジニアリングの目的と原則がより明確かつ直感的に理解できるようになる(はず)
ガイドの構成
データ変換の流れと同じ順序で、トピックを追っていくマス。
- modelsディレクトリにある3つの主要なレイヤーのファイル、フォルダ、モデルをどのように構造化し、互いに構築し合っているのかを調べてみよう。
- Staging(ステージング) : ソースデータから取り込み(RAW)層を作成
- Intermediate(中間) : (クレンジングで型を整えたり、マートを作るための整形とかする)
- Marts(マート) : モジュール化した(断片化)モデルを組織で判断に使えるようになモデルにまとめる
- これらのレイヤーがプロジェクトの他の部分にどのようにフィットするかを探る
1.全体的な構造を総合的に見直す
2.YAMLコンフィギュレーションの詳細
3.dbtプロジェクトでの他のフォルダの使い方について :tests
,seeds
,analyses
プロジェクトを構成のツリーはだいたいこんな感じ
jaffle_shop
├── README.md
├── analyses
├── seeds
│ └── employees.csv
├── dbt_project.yml
├── macros
└── cents_to_dollars.sql
├── models
│ ├── intermediate
││ └──finance
│├──_int_finance__models.yml
││ └──int_payments_pivoted_to_orders.sql
│ ├── marts
│├──finance
│ │ ├── _finance__models.yml
││ ├──orders.sql
│ │ └── payments.sql
│└──marketing
│├──_marketing__models.yml
│└──customers.sql
│ ├── staging
│├──jaffle_shop
│ ├── _jaffle_shop__docs.md
│ │ ├── _jaffle_shop__models.yml
│ ├── _jaffle_shop__sources.yml
│ │ ├── base
│ ├── base_jaffle_shop__customers.sql
│ │ └── base_jaffle_shop__deleted_customers.sql
│ │ ├── stg_jaffle_shop__customers.sql
│ │ └──stg_jaffle_shop__orders.sql
│└──stripe
│ ├──_stripe__models.yml
│├──_stripe__sources.yml
│└──stg_stripe__payments.sql
│ └── utilities
│ └── all_dates.sql
├── packages.yml
├── snapshots
└── tests
└── assert_positive_value_for_total_amount.sql
Staging: Preparing our atomic building blocks
Staging層のお話
Staging層は、データを取り込む最初の層
Discussion