Snowflake MigrationClickHouse Workshops
計画ワークシート

ワークシート5: dbt モデル設計

各 dbt モデルについて、マテリアライゼーション、エンジン、増分戦略を設定します。回答ごとに即時にフィードバックが返ります。

所要時間の目安: 15〜20分 参照: dbt on ClickHouse

概念

ワークシート1〜4が生み出したのは 何を です。どのエンジンか、どの ORDER BY か、どの ClickHouse の型か。このワークシートが生み出すのは どう です。SQL を1行も書く前に、それらの判断を dbt の 設定としてどう表現するかです。

dbt-clickhouse のモデルには、Snowflake の開発者が考える必要のなかった3層の設定があります。

  1. マテリアライゼーション — dbt はどの物理オブジェクトを作るのか(view、table、 incremental、ephemeral)?
  2. エンジン設定 — table および incremental のモデルについて、どの ClickHouse エンジンと バージョンカラムを使うのか?
  3. 増分戦略 — incremental のモデルについて、dbt は新規行・更新行をどう扱うのか?

さらに ReplacingMergeTree に固有の、正しさに関わる論点があります。

  1. FINAL の置き場所 — 重複排除された読み取りを保証するために、dbt の DAG のどこに FINAL を置くのか?

マテリアライゼーションには次のデシジョンツリーを使ってください。

  • ソースからの追記のみの読み取りで、モデル自身への書き込みがない? → view
  • 純粋な join のロジックで、直接クエリされない? → ephemeral
  • dbt の実行ごとにフルリビルドし、部分更新はない? → table
  • 実行ごとに新規行・変更行だけを処理する? → incremental

ステージングモデルは常に view です — ワークシート1と同じルールです。stg_trips と stg_taxi_zones は自身の書き込みを持たない素通しの読み取りなので、ソースデータの振る舞いに 関係なく view のままです。

演習1: マテリアライゼーションの選定

各モデルについて、正しい dbt のマテリアライゼーションを選び、そのうえで表の下の問いでその理由に 答えてください。

演習2: エンジン設定

ClickHouse のエンジンが必要なのは、マテリアライゼーションが table または incremental の モデルだけです — view と ephemeral のモデルには何もありません。ワークシート1の回答を参照して ください。dbt のエンジン設定は、そこですでに下したエンジンの判断を実装したものです。

演習3: 増分戦略の設計

各 incremental モデルについて、増分設定を丸ごと設計してください。unique_key、 incremental_strategy、そして is_incremental() のガードブロック内に入る SQL のフィルタです。

{% if is_incremental() %}
  WHERE <your filter here>
{% endif %}

演習4: FINAL の置き場所

ReplacingMergeTree の重複排除は非同期です。FINAL は読み取り時にそれを強制します — ただし FINAL を誤ったモデルに置くと、正しさか性能に影響が出ます。以下の各モデルについて、FINAL が そのモデル自身の FROM 句に属するかどうかを答えてください。

Loading worksheet...

migration-plan.md への転記

このワークシートを終えたら、migration-plan.md のセクション10に回答を記入し、次を チェックしてください。

- [ ] dbt model design: completed

このページの内容

Track your progress?

Optional. We email a link to confirm your address; progress records once you open it.

Please use your work email address, not a personal one.

Progress tracking also requires accepting the current Terms of Service in Privacy settings.

JA