トラブルシューティング
このラボを進めるなかで受講者が遭遇する失敗について、症状・原因・対処をまとめたリファレンスです。症状が現れる箇所ごとに整理されています。
以下の項目はすべて実際の失敗です。ラボ自身のパート README に記載された11件に加え、この
ワークショップの構築とテスト中に見つかった5件です。自分の症状を探し、原因を読み、対処を
適用してください。ここに一致するものがない場合は、講師トラックの
## Common failures セクションが各モジュールのファシリテーター側をより詳しく扱っています。
その次の相談先は担当のソリューションアーキテクトです。
ツールチェーンとセットアップ
dbt が mashumaro のインポートエラーで失敗する、またはインストールできない
- 症状 -
dbt-snowflakeまたはdbt-clickhouseのインストールが失敗する、あるいはdbtが Python のバージョンとは一見関係のなさそうなmashumaroに言及するインポートエラーを出す。 - 原因 -
dbt-snowflakeとdbt-clickhouseはどちらも Python 3.11、3.12、または 3.13 を必要とします。Python 3.14 以上では両者が共有するmashumaro依存関係が壊れ、その失敗は 通常、間違いを犯したあとの無関係なモジュールで表面化します。 - 対処 - システムの Python と並べて 3.13 をインストールし(例:
brew install python@3.13)、そのインタープリターを明示して仮想環境を作り直します:python3.13 -m venv .venv。
Snowflake のソース環境
terraform init がプロバイダーのエラーで失敗する
- 症状 -
workshop_public/snowflake_migration_lab/01-setup-snowflake/でのterraform initが プロバイダーの解決中に失敗する。 - 原因 - Terraform のバイナリが古い、または Terraform レジストリへのネットワークアクセスがない。
- 対処 - Terraform >= 1.6 を使い、レジストリへのインターネットアクセスを確認します。
snowsql の接続が拒否される
- 症状 -
snowsql -a ${SNOWFLAKE_ORG}-${SNOWFLAKE_ACCOUNT} -u ${SNOWFLAKE_USER}が 接続を拒否する。 - 原因 -
SNOWFLAKE_ORGまたはSNOWFLAKE_ACCOUNTが間違っている。 - 対処 - 作成したアカウントと両方の値を照合し直し、同じ
snowsqlコマンドを再試行します。
dbt run が relation not found で失敗する
- 症状 - パート1の dbt プロジェクトでの
dbt runが、存在しないリレーションを報告する。 - 原因 - データベースの構造が作成されていない。
- 対処 - 先に
./setup.sh --skip-seedを実行し、profiles.ymlがNYC_TAXI_DBを 指していることを確認します。
Superset が connection refused を表示する
- 症状 -
docker-compose upの直後、パート1の Superset の UI が接続を拒否する。 - 原因 - Superset の初期化には約60秒かかります。
- 対処 - 60秒待って再試行します。それでも失敗する場合は
docker logs nyc_taxi_supersetを確認します。
データのシード投入が想定より長くかかる
- 症状 -
workshop_public/snowflake_migration_lab/01-setup-snowflake/のシード手順が 止まっているように見える。 - 原因 - この規模では Snowflake の通常の挙動であり、ハングではありません。5,000万行を生成する
TABLE(GENERATOR)の挿入に約10〜12分かかり、続いて5,000万行すべての VARIANTTRIP_METADATAカラムを埋めるUPDATEに、SMALL ウェアハウスでさらに15〜20分かかります。 - 対処 - そのまま実行させてください。どちらの手順も対話的ではなく、再試行するものはありません。
ClickHouse Cloud のプロビジョニングとデータの移行
Terraform の認証が 401 Unauthorized で失敗する
- 症状 -
workshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/での Terraform の apply が 401 Unauthorized で失敗する。 - 原因 -
CLICKHOUSE_TOKEN_KEYまたはCLICKHOUSE_TOKEN_SECRETが間違っている、あるいは キーに必要なスコープがない。 - 対処 - ClickHouse Cloud の UI の Settings -> API keys からキーペアを再生成し、 Admin スコープが付いていることを確認します。
マイグレーションスクリプトが実行中に失敗する
-
症状 -
scripts/02_migrate_trips.pyが5,000万行のコピーの途中で終了する。 -
原因 - 長時間の転送中に発生した一時的なネットワークまたはウェアハウスの不調。
-
対処 -
--resumeを付けて再実行します。スクリプトは ClickHouse にすでに存在するmax(pickup_at)をウォーターマークとし、すでに読み込んだ行をスキップします:python scripts/02_migrate_trips.py --resume
マイグレーションスクリプトの接続エラー
-
症状 - マイグレーションスクリプトが Snowflake または ClickHouse に到達できない。
-
原因 - 現在のシェルで Snowflake または ClickHouse の環境変数が1つ以上未設定になっている。
-
対処 - それらを確認し、再試行の前に state ファイルを source し直します:
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 プロジェクトに対する
dbt runが、ホストの解決または接続に失敗する。 - 原因 - 現在のシェルで
CLICKHOUSE_HOSTが設定されていない。 - 対処 - モジュールのディレクトリから
source .clickhouse_stateを実行し、dbt runを 再試行します。
dbt が Could not find profile named 'nyc_taxi_ch' で失敗する
- 症状 -
workshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/dbt/nyc_taxi_dbt_chでのdbt debugまたはdbt runが、プロファイルが見つからないエラーで即座に失敗する。 - 原因 - ClickHouse の dbt プロファイルが
~/.dbt/profiles.ymlに追加されていない。 - 対処 -
workshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/dbt/nyc_taxi_dbt_ch/profiles.yml.exampleを開き、そのnyc_taxi_ch:ブロックを2つ目のトップレベルプロファイルとして既存の~/.dbt/profiles.ymlにマージします。ファイルを上書きしないでください。 上書きすると モジュール01のnyc_taxi:プロファイルが消え、その手順4のリフレッシュループが壊れます。 このマージ手順を詳しく扱っている 03 プロビジョニングと移行 を参照してください。
ClickHouse 上の dbt
dbt の実行後に analytics.agg_hourly_zone_trips が空である
- 症状 - モジュール04の
dbt runのあと、analytics.agg_hourly_zone_tripsの行数がゼロで、 それを使うダッシュボードのチャートにデータが表示されない。 - 原因 - これは想定どおりで、失敗ではありません。このモデルの増分フィルターは
WHERE pickup_at >= now() - INTERVAL 2 HOURであり、稼働中の trip プロデューサーが書き込んだ 行にしか一致しません。マイグレーションスクリプトが移した行はすべて過去のものなので、 その2時間のウィンドウには1行も入りません。 - 対処 - 直すものはありません。ここではゼロが正しい値です。 05 ベンチマークとカットオーバー のカットオーバー手順のあと、プロデューサーが直接 ClickHouse に書き込むようになると、この テーブルは埋まります。
ダッシュボードとベンチマーク
Superset が 403 Forbidden を表示する
- 症状 - モジュールの途中で Superset の UI が 403 Forbidden を返す。
- 原因 - セッションの cookie が期限切れになった。
- 対処 - ログアウトし、
http://localhost:8088で再度ログインしてから、bash superset/add_clickhouse_connection.shを再実行します。
ベンチマークで Q7 が N/A になる
- 症状 -
run_benchmark.shの出力 CSV で、クエリ7の高速化の値がN/Aになっている。 - 原因 - ベンチマークスクリプトが ClickHouse に接続できなかった。
- 対処 -
CLICKHOUSE_HOSTが設定されていること(source .clickhouse_state)と、サービスが 稼働していることを確認し、ベンチマークを再実行します。
インポートした Superset のダッシュボードが ClickHouse に接続できない
- 症状 - Superset にインポートしたダッシュボードは読み込まれるが、そのチャートが ClickHouse に到達できない。
- 原因 - コミット済みのエクスポート ZIP は、ホストが
your-instance.clickhouse.cloudに置き換えられています。add_clickhouse_connection.shは インポート前に.envから実際の URI をパッチしますが、Superset の UI からの手動インポートは それをしません。 - 対処 - 手動インポートではなく
bash superset/add_clickhouse_connection.shを使うか、 あとから接続を編集して実際のCLICKHOUSE_HOSTと認証情報を使うようにします。
カットオーバーとパリティ
パリティチェックが失敗する、またはカットオーバーで行が失われたように見える
-
症状 - モジュール05の行数パリティチェックが失敗する、あるいはカットオーバーでデータを 落としたように見える。
-
原因 -
--resumeの追いつきパスが飛ばされました。Snowflake のプロデューサーはモジュール 01〜05を通して継続的に書き込むため、モジュール03のマイグレーションはデータの先頭部分しか 捉えていません。末尾は、追いつきを行うまで Snowflake にしか存在しません。Snowflake の プロデューサーを早く止めてしまうと(たとえばモジュール01の直後に)、追いつくべき末尾が 残らないため、このモジュールのカットオーバーの実演が黙って壊れます。 -
対処 - パリティを確認する前に追いつきパスを実行します。ギャップの行だけを移すので、 元の40〜50分ではなく数秒から数分で終わります:
python scripts/02_migrate_trips.py --resume bash scripts/01_verify_migration.sh