Cloud Storage Avro to Spanner データ検証テンプレート

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デフォルトは空です。

テンプレートを実行する

コンソール

  1. Dataflow の [テンプレートからジョブを作成] ページに移動します。
  2. [テンプレートからジョブを作成] に移動
  3. [ジョブ名] フィールドに、固有のジョブ名を入力します。
  4. (省略可)[リージョン エンドポイント] で、プルダウン メニューから値を選択します。デフォルトのリージョンは us-central1 です。

    Dataflow ジョブを実行できるリージョンのリストについては、Dataflow のロケーションをご覧ください。

  5. [Dataflow テンプレート] プルダウン メニューから、[Cloud Storage Avro files to Spanner Data Validation] テンプレートを選択します。
  6. 表示されたパラメータ フィールドに、パラメータ値を入力します。
  7. [ジョブを実行] をクリックします。

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 プロジェクト ID
  • JOB_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。