Snowflake MigrationClickHouse Workshops

01 ソース環境

Snowflake のソース環境をプロビジョニングするためのファシリテーター向けガイド — 所要時間、動かし続ける必要がある producer、トラブルシューティング。

学習者向けレッスン 01 ソース環境 に対応するファシリテーター向けの手引きです。

所要時間

合計で約 45 分。Step 2(./setup.sh)が唯一の無人区間で、おおよそ 5〜10 分、その大半は TABLE(GENERATOR) による合成データのシードです。黙って眺めるより話しながら過ごす価値が あり、下記のトークトラックに適したタイミングです。残りの時間(Step 1 と Step 3〜5)は パートナーがキーボードに向かう必要があります。認証情報の設定、producer と Superset が 立ち上がったことの確認、dbt のリフレッシュループの起動、7 本のクエリの読み込みです。

トークトラック

  • このモジュールは、おもちゃのようなテーブルではなく、移行するに値するソースを構築するために 存在します。VARIANT カラム、CDC ストリーム、2 つのスケジュールされたタスク、そしてその すべての上に載る BI レイヤーです。これらのすべてが、モジュール 02 で具体的な移行判断に なります。
  • Medallion の形を図の上で一度たどってください。NYC_TAXI_DB 内の RAW -> STAGING -> ANALYTICS と、dbt とは独立にそれを動かし続ける 2 つのオブジェクト — TRIPS_CDC_STREAM と 2 つのスケジュールされたタスクです。
  • パートナーがモジュール 02 までクエリを変換しないとしても、クエリライブラリ(Step 5)を 指し示してください。7 本のそれぞれに ClickHouse 側の下書きとなるコメントが既に付いている ため、パートナーは今のうちからパターンの照合を始められます。
  • モジュールの最後にも繰り返し、はっきりと伝えてください。producer と dbt のリフレッシュ ループは動かし続けること。モジュール 05 のカットオーバーは、移行中に producer が Snowflake と ClickHouse の間に生じさせた正確なギャップを計測します。ここで片付けようとして 停止してしまったパートナーは、3 つ先のモジュールでのそのデモンストレーションを気付かない うちに壊してしまいます。

よくある失敗

  • terraform init がプロバイダーのエラーで失敗する。 Terraform >= 1.6 であること、 そしてマシンから Terraform レジストリへのインターネットアクセスがあることを確認します。
  • snowsql の接続が拒否される。 SNOWFLAKE_ORG と SNOWFLAKE_ACCOUNT を検証し、 snowsql -a ${SNOWFLAKE_ORG}-${SNOWFLAKE_ACCOUNT} -u ${SNOWFLAKE_USER} で直接テストします。
  • dbt run が relation not found で失敗する。 まず ./setup.sh --skip-seed を実行して ください。これがデータベース構造を作成します。そして profiles.yml が NYC_TAXI_DB を 指していることを確認します。
  • Superset が connection refused を表示する。 Superset は docker-compose up の後、 初期化に約 60 秒かかります。それ以降もまだ落ちている場合は docker logs nyc_taxi_superset を確認します。
  • データのシードがパートナーの予想より長くかかる。 TABLE(GENERATOR) の insert は おおよそ 10〜12 分で 5,000 万行を生成し、その後 5,000 万行すべての TRIP_METADATA JSON カラムを埋める UPDATE は、SMALL のウェアハウスではさらに 15〜20 分かかることがあります。 これは大きな VARIANT カラムの更新における Snowflake の正常な挙動で、停止ではありません。 正しく動いているスクリプトのトラブルシューティングをパートナーが始める前に、そう伝えて ください。
  • このモジュールが「終わった」ように見えた時点で、パートナーがトリップ producer を止めて しまう。 終わっていません。モジュール 02 から 05 はすべてそれが動き続けていることに依存し、 モジュール 05 のカットオーバーはとりわけそれが生じさせるギャップを計測します。これは ワークショップ全体で最も損害の大きい、片付け好きゆえのミスです。一度ではなく明示的に 伝えてください。

リセット手順

  • 約 10 分のデータロードを払い直さずに再プロビジョニングする: ./setup.sh --skip-seed (インフラは既に存在し、TRIPS_RAW にも既にデータがある場合)。
  • Terraform や SQL の変更だけを反復する: ./setup.sh --skip-seed のみ。
  • dbt モデルだけを反復し、Superset を完全にスキップする: ./setup.sh --skip-seed --skip-superset。
  • dbt を再実行せずに Terraform の変更をテストする: --skip-dbt を追加します。
  • dbt モデルのスキーマ変更後にインクリメンタルの完全再構築を強制する: --full-refresh (データロードも払い直すのを避けるため --skip-seed と組み合わせます)。
  • 環境が回復不能な場合に限る完全リセット: workshop_public/snowflake_migration_lab/01-setup-snowflake/ から source .env && ./teardown.sh を実行し、その後プレーンな ./setup.sh を再実行します。 これは破壊的で、約 10〜12 分のシード全体を払い直します。行き詰まったパートナーへの 最初の対応として手を伸ばさないでください。

このページの内容

JA