03 プロビジョニングと移行
ClickHouse のプロビジョニングと移行モジュールのファシリテーター向けガイド — 40〜50 分の無人転送と、欠けている dbt プロファイル。
学習者向けレッスン 03 プロビジョニングと移行 に対応するファシリテーター向けの手引きです。
所要時間
合計で約 60 分ですが、合計よりも時間の形が重要です。ハンズオン作業がおおよそ 10〜15 分
(Step 1 が Terraform 経由で ClickHouse Cloud サービスをプロビジョニングし、約 2〜3 分。
Step 2 が trips_raw を作成し、ゾーンの参照データをシードし、最初の空の dbt run を実行して
さらに数分)、その後に 40〜50 分の無人データ転送(Step 3 の移行スクリプトが、おおよそ毎秒
20K 行で 5,000 万行を移動)が続きます。
これはワークショップ全体で最も重要なスケジュール上の事実です。Step 3 が始まると、会場は
1 時間近く何もすることがありません。 これを開始し、そこで休憩を取ってください。あるいは
会場に時間がなかったモジュール 02 のトークトラックの題材や、パートナーの
migration-plan.md の判断についてのライブ Q&A にこの待ち時間を使ってください。このモジュール
内の他のどこにも休憩を入れず、意図してここに入れてください。
トークトラック
- このラボがネイティブコネクタではなく Python スクリプトでデータを動かす理由についての、 モジュール自身の根拠です。Snowflake はサポートされている ClickPipes のソースではありません (Kafka、S3、Kinesis、Postgres/MySQL の CDC はサポート対象ですが、Snowflake は違います)。 そして代替手段のいずれも(S3 エクスポート、Snowflake -> Kafka -> ClickHouse)、ラボ規模の セットアップを、移行そのものとは無関係なインフラ — S3 バケット、IAM ロール、Kafka クラスター — と引き換えにしてしまいます。
- Python スクリプトの実際の利点は、明示的に挙げる価値があります。AWS アカウントが不要、
自己完結している(新しく入る 2 つのパッケージは dbt と同じ venv に入る)、
max(pickup_at)のウォーターマークに対して--resumeで再開可能、そして UI のウィザードを クリックしていくのではなくパートナーがカラムのマッピングを読める程度に透明である、という 点です。 - 本番向けの代替案は正直に名指ししてください。おおよそ 5 億行を超える場合、あるいはフル テーブルスキャンによるウェアハウスのコストが問題になる場合は、S3 エクスポートのほうが 適切な判断です。並列エクスポート、並列ロードになります。Python スクリプトはラボ規模に 適した選択で、普遍的な推奨ではありません。
- モジュール 05 がそれを埋めるとしても、移行のギャップについてここで予告してください。Step 3 が走っている間ずっと Snowflake の producer は書き込みを続けるため、ClickHouse は転送の長さ ぶんだけ Snowflake から遅れます。そのギャップはここでは想定どおりのもので、まさにモジュール 05 のカットオーバーがそれを埋めて計測するために作られています。40〜50 分の待ち時間が データを「無駄にしている」のではないかと誰かが尋ねる前に、これを伝えてください。
よくある失敗
- Step 2 の最初の
dbt runがCould not find profile named 'nyc_taxi_ch'で失敗する。dbt_project.ymlがそれを要求しているにもかかわらず、ラボの 中には ClickHouse のnyc_taxi_chdbt プロファイルを自動的に作成するものがありません。 学習者向けレッスンの 03 プロビジョニングと移行 がこれを扱っています。Step 2 の「Configure the dbt profile」で、このdbt runの前に 既存の~/.dbt/profiles.ymlへnyc_taxi_ch:ブロックをマージする手順をパートナーに 案内しています。パートナーがその手順を飛ばしたりコピーを誤ったりした場合は、ここで 回避策を再説明するのではなく、その手順に戻すよう案内してください。 - Terraform の認証が
401 Unauthorizedで失敗する。CLICKHOUSE_TOKEN_KEYとCLICKHOUSE_TOKEN_SECRETを検証してください。どちらも ClickHouse Cloud UI の Settings -> API keys にあり、Admin スコープを持っている必要があります。 - 移行スクリプトが実行中に失敗する。
--resumeで再実行してください。既に ClickHouse に あるmax(pickup_at)でウォーターマークを取り、既にロード済みの行はスキップするため、 再開しても部分的で回復不能なロードになることはありません。 - 移行スクリプトがまったく接続できない。 Snowflake と ClickHouse のすべての環境変数が
設定されていることを確認し(
echo $SNOWFLAKE_ORG $SNOWFLAKE_ACCOUNT $SNOWFLAKE_USER $SNOWFLAKE_PASSWORDとecho $CLICKHOUSE_HOST $CLICKHOUSE_PASSWORD)、それからsource .env && source .clickhouse_stateして再試行します。 dbt runがConnection refusedまたはUnknown hostで失敗する。 現在のシェルでCLICKHOUSE_HOSTが設定されていません。workshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/からsource .clickhouse_stateを実行して再試行してください。
リセット手順
- 移行スクリプトが中断した場合:
python scripts/02_migrate_trips.py --resumeは 5,000 万行の 転送全体をやり直すのではなく、ウォーターマークから続行します。 - ClickHouse Cloud サービスをきれいに作り直す必要がある場合:
workshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/からsource .env && ./teardown.sh(サービスと、カットオーバーが既に済んでいる場合は ClickHouse の producer コンテナを破棄します)、その後もう一度./setup.shを実行します。 これはモジュール 01 の Snowflake 側には触れません。そちらにはworkshop_public/snowflake_migration_lab/01-setup-snowflake/に独自のteardown.shが あります。 - ここでの完全リセットは高価です。移行をやり直すと 40〜50 分の転送すべてを払い直します。
ClickHouse サービス自体が健全なままである限り、完全なティアダウンよりも
--resumeか 的を絞った修正を選んでください。