データ検証では、移行ジョブがデータを正確に移行したかどうかをチェックします。検証エンジンは、ソースデータベースと移行先データベースに接続し、移行されたドキュメントをソースデータと比較します。検証エンジンは次の項目を検証します。
フィールド名
データ型
フィールドパス
Values
データ検証は、1 回限りの移行ジョブでデフォルトで実行されます。ジョブの検証を有効または無効にする方法については、 データ検証の使用 を参照してください。
注意
このページでは、Relational Migrator 1.18 以降の検証エンジンについて説明します。以前のバージョンでは、プライマリキー値のみをチェックし、より狭い範囲のスキーマを検証し、実行が遅くなります。これらの検証機能を使用するには、1.18 以降にアップグレードしてください。
データ検証の仕組み
移行ジョブの各コレクションについて、検証エンジンは次の手順を実行します。
宛先コレクション内のドキュメントの数とソース テーブル内の行数を比較します。詳細については、「 ドキュメント数の比較 」を参照してください。
ソーステーブルのプライマリキーを使用して、ソースデータベースから行をバッチして取得し、各ソースカラムをコレクション内の対応するフィールドパスにマップします。
宛先コレクションから同じプライマリキーを持つドキュメントを取得します。検証エンジンは、各フィールド値を対応するソース列値と比較できるように、これらのドキュメントを展開してフラット化します。
ソース行を宛先ドキュメントと比較します。詳細については、「 フィールドレベルの比較 」を参照してください。
検証エンジンがすべてのコレクションに対してこれらの手順を完了し、不一致が見つからない場合、データ検証プロセスは VERIFIED のステータスを報告します。検証ステータスの詳細については、「データ検証ステータス」を参照してください。
ドキュメント数の比較
宛先コレクションのドキュメント数が、新しいドキュメントマッピングのソース テーブルの行数と一致しない場合、検証エンジンは不一致を報告します。カウントの不一致によって、コレクションの検証が停止することはありません。
フィールドレベル比較
検証エンジンは、プライマリキー値によってソース行を対象ドキュメントにマッチさせます。プライマリキー値は一意であるため、通常はちょうど 1 つのソース行と 1 つの対象ドキュメントを識別します。検証エンジンは、マッチされたペアの各フィールドを比較します。ペアが一致しない場合、検証エンジンは各違異点を報告します。
場合によっては、複数の行またはドキュメントが同じプライマリキー値を共有しています。例えば、検証エンジンが埋め込み配列を展開すると、各配列要素は親ドキュメントのプライマリキー値を共有します。複数の不一致の行またはドキュメントが同じプライマリキー値を共有している場合、検証エンジンはペアリングを試みません。代わりに、不一致の行とドキュメントの数を報告し、1 つの代表的なソース行と宛先ドキュメントの計算された差異を表示します。
いずれの場合も、検証エンジンはプライマリキー値の全セットをログに記録するため、影響を受けたデータを見つけることができます。
確認の前提
データ検証では、移行ジョブの開始後にソース データが変更されないこと、および宛先コレクションには移行されたデータのみが含まれることを前提としています。いずれかの前提が正しくない場合、検証エンジンは移行エラーではない不一致を報告することがあります。
移行ジョブの開始前に宛先コレクションにデータが含まれていた場合、検証エンジンは既存のドキュメントを予期しないドキュメントとして報告します。
移行ジョブの開始後にソース データが変更されると、検証エンジンは変更された行と移行されたドキュメント間の不一致を報告します。
制限
データ検証により、移行ジョブのコンピュート時間が大幅に増加する可能性があります。検証エンジンには、データベース、ジョブ、コレクション、フィールドレベルでも制限があります。
サポートされているデータベース
データ検証は、次のソース データベースをサポートしています。
PostgreSQL
Oracle
MySQL
SQL Server
サポートされていない構成
migrator.job.allow.null.join ユーザー プロパティが true に設定されている場合、データ検証は実行できません。SQL 比較ではヌル値は一致しないため、検証エンジンは停止し、Job Update Log ペインにエラーを報告します。
スキップされたコレクション
検証エンジンは次の場合にコレクションをスキップします。
ソーステーブルにプライマリキーがないか、1 つ以上のプライマリキーフィールドがマップされていません。検証エンジンはプライマリキー値を使用して行をバッチして取得します。
コレクションはマッピングルールフィルターを使用します。移行したデータをフィルターするには、代わりにテーブルフィルターを使用します。詳細については、「マッピングルールフィルター」と「テーブルフィルター」を参照してください。
このコレクションでは配列条件を使用します。詳細については、「埋め込み配列」を参照してください。
このコレクションでは行制限のあるテーブルフィルターを使用します。
ORDER BY句がない場合、フィルターが選択する行は確定されません。検証可能な行制限を適用するには、フィルターの SQL ステートメントにORDER BY句とLIMIT句の両方を追加します。
スキップされたフィールド
検証エンジンは次の場合、フィールドをスキップします。
フィールドは計算フィールドです。詳細については、「計算フィールド」を参照してください。
フィールドのソース列タイプは
INTERVALです。フィールドのターゲットタイプは
BOOL、DATE、DECIMAL、INTEGER、LONG、STRINGのいずれでもありません。例えば、検証エンジンはObjectIdフィールドをスキップします。