Cloud Storage Avro files to Spanner Data Validation テンプレートは、Cloud Storage と Spanner からデータを読み取り、それらを比較して移行の正確性を検証するバッチ パイプラインです。
パイプラインの要件
- パイプラインの実行前に、Avro ファイルの Cloud Storage ディレクトリが存在している必要があります。これらの Avro ファイルを生成するには、
gcsOutputDirectoryパラメータを使用して SourceDB to Cloud Spanner パイプラインを実行します。 - 検証結果のターゲット BigQuery データセットは、パイプラインの実行前に存在している必要があります。
- パイプラインの実行前に Spanner テーブルが存在している必要があります。
- Spanner テーブルに互換性のあるスキーマが必要です(直接またはスキーマ マッピングを介して)。
- SourceDB to Cloud Spanner パイプラインによって実行された移行を検証するには、共有構成(
sessionFilePath、schemaOverridesFilePath、transformationJarPathなど)に同じ値を渡す必要があります。
テンプレートのパラメータ
必須パラメータ
- gcsInputDirectory: このディレクトリは、ソースから読み取ったレコードの AVRO ファイルを読み取るために使用されます。例:
gs://your-bucket/your-path - projectId: Cloud Spanner プロジェクトの名前。
- instanceId: 宛先の Cloud Spanner インスタンス。
- databaseId: 宛先の Cloud Spanner データベース。
- bigQueryDataset: 検証結果が保存される BigQuery データセット ID。例:
validation_report_dataset
オプション パラメータ
- spannerHost: テンプレート内で呼び出す Cloud Spanner のエンドポイント。例:
https://batch-spanner.googleapis.com。デフォルトは https://batch-spanner.googleapis.com です。 - spannerPriority: Cloud Spanner 呼び出しのリクエストの優先度。値は
HIGH、MEDIUM、LOWのいずれかにする必要があります。デフォルトはHIGHです。 - sessionFilePath: Spanner Migration Tool のマッピング情報が含まれる Cloud Storage 内のセッション ファイルのパス。デフォルトは空です。
- schemaOverridesFilePath: ソースから Spanner へのテーブルと列名のオーバーライドを指定するファイル。デフォルトは空です。
- tableOverrides: ソースから Spanner へのテーブル名のオーバーライド。次の形式で記述されます。[{SourceTableName1, SpannerTableName1}, {SourceTableName2, SpannerTableName2}] この例では、Singers テーブルを Vocalists に、Albums テーブルを Records にマッピングしています。例:
[{Singers, Vocalists}, {Albums, Records}]デフォルトは空です。 - columnOverrides: ソースから Spanner への列名のオーバーライドです。[{SourceTableName1.SourceColumnName1, SourceTableName1.SpannerColumnName1}, {SourceTableName2.SourceColumnName1, SourceTableName2.SpannerColumnName1}] の形式で記述されます。SourceTableName は、ソースペアと Spanner ペアの両方で同じである必要があります。テーブル名をオーバーライドするには、tableOverrides を使用します。この例では Singers テーブルと Albums テーブルそれぞれで、SingerName を TalentName に、AlbumName を RecordName にマッピングしています。例:
[{Singers.SingerName, Singers.TalentName}, {Albums.AlbumName, Albums.RecordName}]。デフォルトは空です。 - runId: 検証実行の固有識別子。指定しない場合、Dataflow ジョブ名が使用されます。例:
run_20230101_120000 - transformationJarPath: レコードを処理するカスタム変換ロジックが含まれる、Cloud Storage 内のカスタム jar の場所。デフォルトは空です。
- transformationClassName: カスタム変換ロジックが含まれる完全修飾クラス名。transformationJarPath が指定されている場合は必須フィールドです。デフォルトは空です。
- transformationCustomParameters: カスタム変換クラスに渡すカスタム パラメータが含まれる文字列。デフォルトは空です。
- tables: 検証実行に含めるコピー元テーブルのカンマ区切りのリスト。デフォルトは空です。
- tableConfigurationFilePath: 検証するソーステーブルの JSON リストを含む GCS ファイルパス。これは、
{"tableNames": ["table1", "table2"]}構造の JSON ファイルである必要があります。必要に応じて、optionalConfigurations.<sourceTable>.spannerQueryは、そのテーブルの読み取りに使用される Spanner クエリを設定します(たとえば、選択したshardIdsに制限するなど)。Spanner 名で Spanner 専用テーブルをキー設定します。クエリ ルールについては、モジュールの README.md の「シャードのサブセットの検証」セクションをご覧ください。デフォルトは空です。 - shardIds: 論理シャード ID のカンマ区切りのリスト(sourcedb-to-spanner テンプレートで使用される ID。Avro 出力では
<table>/<shardId>/ディレクトリとして表示されます)。設定すると、これらのシャードのみが検証されます。セッション ファイルShardIdColumnを含むテーブルは、その列でフィルタされます。他のすべてのスコープ内テーブルにはtableConfigurationFilePathにspannerQueryが必要です。そうでない場合、ジョブは失敗します。例:shard_001,shard_007デフォルトは空です。
テンプレートを実行する
コンソール
- Dataflow の [テンプレートからジョブを作成] ページに移動します。 [テンプレートからジョブを作成] に移動
- [ジョブ名] フィールドに、固有のジョブ名を入力します。
- (省略可)[リージョン エンドポイント] で、プルダウン メニューから値を選択します。デフォルトのリージョンは
us-central1です。Dataflow ジョブを実行できるリージョンのリストについては、Dataflow のロケーションをご覧ください。
- [Dataflow テンプレート] プルダウン メニューから、[Cloud Storage Avro files to Spanner Data Validation] テンプレートを選択します。
- 表示されたパラメータ フィールドに、パラメータ値を入力します。
- [ジョブを実行] をクリックします。
gcloud CLI
シェルまたはターミナルで、テンプレートを実行します。
gcloud dataflow flex-template run JOB_NAME \ --template-file-gcs-location=gs://dataflow-templates/VERSION/flex/Avro_to_Spanner_Data_Validator \ --region=REGION_NAME \ --parameters \ gcsInputDirectory=PATH_TO_AVRO_FILES,\ projectId=PROJECT_ID,\ instanceId=INSTANCE_ID,\ databaseId=DATABASE_ID,\ bigQueryDataset=BIGQUERY_DATASET
次のように置き換えます。
JOB_NAME: 一意の任意のジョブ名VERSION: 使用するテンプレートのバージョン使用できる値は次のとおりです。
latest: 最新バージョンのテンプレートを使用します。このテンプレートは、バケット内の日付のない親フォルダ(gs://dataflow-templates/latest/)にあります。- バージョン名(例:
2023-09-12-00_RC00)。特定のバージョンのテンプレートを使用します。このテンプレートは、バケット gs://dataflow-templates/ 内の、日付付き親フォルダに格納されています。
REGION_NAME: Dataflow ジョブをデプロイするリージョン(例:us-central1)PATH_TO_AVRO_FILES: Avro ファイルの Cloud Storage パス。PROJECT_ID: Spanner プロジェクト ID。INSTANCE_ID: 宛先 Spanner インスタンス ID。DATABASE_ID: 宛先 Spanner データベース ID。BIGQUERY_DATASET: 検証結果の BigQuery データセット ID。
API
REST API を使用してテンプレートを実行するには、HTTP POST リクエストを送信します。API とその認証スコープの詳細については、projects.templates.launch をご覧ください。
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launchParameter": { "jobName": "JOB_NAME", "parameters": { "gcsInputDirectory": "PATH_TO_AVRO_FILES", "projectId": "PROJECT_ID", "instanceId": "INSTANCE_ID", "databaseId": "DATABASE_ID", "bigQueryDataset": "BIGQUERY_DATASET" }, "containerSpecGcsPath": "gs://dataflow-templates/VERSION/flex/Avro_to_Spanner_Data_Validator" } }
次のように置き換えます。
PROJECT_ID: Dataflow ジョブを実行する Google Cloud プロジェクト IDJOB_NAME: 一意の任意のジョブ名VERSION: 使用するテンプレートのバージョン使用できる値は次のとおりです。
latest: 最新バージョンのテンプレートを使用します。このテンプレートは、バケット内の日付のない親フォルダ(gs://dataflow-templates/latest/)にあります。- バージョン名(例:
2023-09-12-00_RC00)。特定のバージョンのテンプレートを使用します。このテンプレートは、バケット gs://dataflow-templates/ 内の、日付付き親フォルダに格納されています。
LOCATION: Dataflow ジョブをデプロイするリージョン(例:us-central1)PATH_TO_AVRO_FILES: Avro ファイルの Cloud Storage パス。PROJECT_ID: Spanner プロジェクト ID。INSTANCE_ID: 宛先 Spanner インスタンス ID。DATABASE_ID: 宛先 Spanner データベース ID。BIGQUERY_DATASET: 検証結果の BigQuery データセット ID。