data-migration · git:20260926.37c70d8 · 2026-09-26 · sha256 4b5926e400776951
data-migration git:20260926.37c70d8A
Immutable. This exact content never changes and is served at /api/v1/blob/4b5926e400776951.
--- name: data-migration description: "CSV / JSON などの既存データを Dataverse / Azure Databricks / Microsoft Fabric Lakehouse へ移行する。ソースのプロファイル → マッピング契約の生成とレビュー → 検証と hash 承認 → 冪等な投入(upsert / MERGE / 全件ロード)→ 件数・キー・列値の照合までをスクリプトで行う。投入先の作成は dataverse / data-platform スキルが担当する。" category: data triggers: - "データ移行" - "データ投入" - "既存データを取り込む" - "CSV を取り込む" - "Excel のデータを移す" - "スキーマ変換" - "マッピング" - "upsert" - "MERGE" - "Lakehouse にロード" - "移行後の照合" - "件数照合" --- # データ移行スキル 既存データを、選定済みのデータ基盤へ **安全に・何度実行しても同じ結果になるように**投入する。 | 原則 | 内容 | |---|---| | 契約を正とする | 列・型・業務キー・参照関係を `mapping.json` に固定し、スクリプトはそれだけを読む | | 業務キー必須 | 各テーブルに一意の業務キーを持たせ、upsert / MERGE で冪等に投入する | | 先に全件検証 | キー重複・必須 NULL・型変換・長さ・参照整合性を投入前にすべて検出する | | 変更は hash 承認 | `plan` の `planHash` を利用者が承認してから `apply`。ソースが変われば hash も変わる | | 読み戻して照合 | 件数・キー集合・列値を投入先から読み戻して比較する。削除は行わない | | パラメーター化 | SQL・URL に値を埋め込まない。識別子は正規表現で検証する | ## サブリファレンス | リファレンス | 内容 | |---|---| | [設計](references/design.md) | 責務分担、処理の流れ、投入方式、安全モデル | | [マッピング契約](references/mapping-contract.md) | `mapping.json` の仕様と型対応 | | [テスト計画](references/test-plan.md) | Unit / Live の ID と合格基準 | | [サンプル(cold-chain)](references/samples/cold-chain/) | 4 表・22 行。data-platform の基準質問の正解が 1 行に決まる | | [.env サンプル](references/.env.example) | 本スキルのパラメータ | | [異常系・トラブルシュート](references/troubleshooting.md) | 実際に踏んだ失敗と恒久対策 | ## ワークフロー(正常系) ```powershell $dm = ".github/skills/data-migration/scripts" ``` ### Step 1: 投入先と権限を確認する 1 回の AskUserQuestion で、投入先(Dataverse / Databricks / Fabric Lakehouse)、書き込み権限、 個人情報の有無、既存データを上書きしてよいかを確認する。投入先が未作成なら先に作る。 | 投入先 | 事前に必要なもの | 担当 | |---|---|---| | Dataverse | テーブル・列・Lookup・**業務キー列の代替キー** | [dataverse](../dataverse/SKILL.md) | | Databricks | workspace・SQL warehouse・catalog(schema は自動作成) | [data-platform](../data-platform/SKILL.md) | | Fabric Lakehouse | capacity(Active)・workspace・Lakehouse | [data-platform](../data-platform/SKILL.md) | ### Step 2: ソースをプロファイルする ```powershell python $dm/profile_source.py --source-dir data/ --out spec/profile.json ``` 型・NULL 数・一意性・キー候補・外部キー候補を確認する。キー候補が無いテーブルは、業務キーを利用者と決める。 ### Step 3: マッピング契約を作り、レビューする ```powershell python $dm/build_mapping.py --profile spec/profile.json --target databricks --catalog <catalog> --schema <schema> --out spec/mapping.json ``` 出力の `review` を 1 件ずつ解消する(Dataverse は entitySet・代替キー・navigationProperty を dataverse スキルの定義と一致させる)。 確定した `mapping.json` を利用者に提示して合意を得る。 ### Step 4: 検証して計画を作る ```powershell python $dm/migrate_data.py plan --mapping spec/mapping.json --source-dir data/ --out .data-migration/plan.json ``` 終了コード 2 なら `errors` を修正して再実行する。成功したら `planHash`・ロード順・件数を提示し、明示承認を得る。 ### Step 5: 投入する ```powershell python $dm/migrate_data.py apply --plan .data-migration/plan.json --approve-hash <planHash> ``` `blocked`(例: Dataverse の代替キー未定義)は前提を整えてから再実行する。途中で失敗しても、同じ plan の再実行で冪等に回復する。 ### Step 6: 照合する ```powershell python $dm/migrate_data.py verify --plan .data-migration/plan.json --out .data-migration/reconcile.json ``` 全テーブルが `verified` になったら完了。`missingKeys` / `extraKeys` / `mismatched` を報告し、 続けて [data-platform](../data-platform/SKILL.md) の Step 6(セマンティック層)と Step 7(runtime 検証)へ進む。