Spanner to Cloud Storage Avro テンプレート

Spanner to Avro Files on Cloud Storage テンプレートは、Spanner データベース全体を Avro 形式で Cloud Storage にエクスポートするバッチ パイプラインです。Spanner データベースをエクスポートすると、選択したバケット内にフォルダが作成されます。このフォルダには以下のものが格納されます。

  • spanner-export.json ファイル。
  • エクスポートしたデータベースの角テーブルの TableName-manifest.json ファイル。
  • 1 つ以上の TableName.avro-#####-of-##### ファイル。

たとえば、SingersAlbums の 2 つのテーブルを持つデータベースをエクスポートして、次のファイルセットを作成します。

  • Albums-manifest.json
  • Albums.avro-00000-of-00002
  • Albums.avro-00001-of-00002
  • Singers-manifest.json
  • Singers.avro-00000-of-00003
  • Singers.avro-00001-of-00003
  • Singers.avro-00002-of-00003
  • spanner-export.json

パイプラインの要件

  • Spanner データベースが存在していること。
  • 出力先の Cloud Storage バケットが存在すること。
  • Dataflow ジョブの実行に必要な Identity and Access Management(IAM)ロールに加えて、Spanner のデータの読み取りと Cloud Storage バケットへの書き込みを行うための適切な IAM ロールも必要です。

テンプレートのパラメータ

必須パラメータ

  • instanceId: エクスポートする Spanner データベースのインスタンス ID。
  • databaseId: エクスポートする Spanner データベースのデータベース ID。
  • outputDir: Avro ファイルをエクスポートする Cloud Storage パス。エクスポート ジョブによって、このパスの下にディレクトリが新規作成されます。ここに、エクスポートされたファイルが格納されます(例: gs://your-bucket/your-path)。

オプション パラメータ

  • avroTempDirectory: 一時的な Avro ファイルが書き込まれる Cloud Storage パス。
  • spannerHost: テンプレート内で呼び出す Cloud Spanner のエンドポイント。テスト専用です(例: https://batch-spanner.googleapis.com)。デフォルトは https://batch-spanner.googleapis.com です。
  • snapshotTime: 読み取る Spanner データベースのバージョンに対応するタイムスタンプ。タイムスタンプは、RFC 3339 UTC Zulu 形式で指定する必要があります。タイムスタンプは過去の日付にする必要があります。また、タイムスタンプ ステイルネスの最大値が適用されます(例: 1990-12-31T23:59:60Z)。デフォルトは空です。
  • spannerProjectId: データを読み取る Spanner データベースを含む Google Cloud プロジェクトの ID。
  • shouldExportTimestampAsLogicalType: true の場合、タイムスタンプは、timestamp-micros 論理型の long 型としてエクスポートされます。デフォルトでは、このパラメータは false に設定され、タイムスタンプはナノ秒単位の精度で ISO-8601 文字列としてエクスポートされます。
  • tableNames: エクスポートする Spanner データベースのサブセットを指定するテーブルのカンマ区切りリスト。このパラメータを設定する場合は、すべての関連テーブル(親テーブルと外部キーで参照されるテーブル)を含めるか、shouldExportRelatedTables パラメータを true に設定する必要があります。テーブルが名前付きスキーマに含まれている場合は、完全修飾名を使用してください。たとえば、sch1.foo を使用します。ここで、sch1 はスキーマ名、foo はテーブル名です。デフォルトは空です。
  • shouldExportRelatedTables: 関連するテーブルを含めるかどうか。このパラメータは、tableNames パラメータと組み合わせて使用します。デフォルトは false です。
  • spannerPriority : Spanner 呼び出しのリクエストの優先度。有効な値は HIGHMEDIUMLOW です。デフォルト値は MEDIUM です。
  • dataBoostEnabled: true に設定すると、Spanner Data Boost のコンピューティング リソースを使用してジョブを実行するときに、Spanner OLTP ワークフローへの影響をほぼゼロにすることができます。true に設定する場合は、spanner.databases.useDataBoost IAM 権限も必要です。詳細については、Data Boost の概要(https://cloud.google.com/spanner/docs/databoost/databoost-overview)をご覧ください。デフォルトは false です。

テンプレートを実行する

コンソール

  1. Dataflow の [テンプレートからジョブを作成] ページに移動します。
  2. [テンプレートからジョブを作成] に移動
  3. [ジョブ名] フィールドに、固有のジョブ名を入力します。

    Google Cloud コンソールの Spanner インスタンス ページにジョブを表示するには、ジョブ名が次の形式になっている必要があります。

    cloud-spanner-export-SPANNER_INSTANCE_ID-SPANNER_DATABASE_NAME

    次のように置き換えます。

    • SPANNER_INSTANCE_ID: Spanner インスタンスの ID
    • SPANNER_DATABASE_NAME: Spanner データベースの名前
  4. (省略可)[リージョン エンドポイント] で、プルダウン メニューから値を選択します。デフォルトのリージョンは us-central1 です。

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

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

gcloud

シェルまたはターミナルで、テンプレートを実行します。

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cloud_Spanner_to_GCS_Avro \
    --region REGION_NAME \
    --staging-location GCS_STAGING_LOCATION \
    --parameters \
instanceId=INSTANCE_ID,\
databaseId=DATABASE_ID,\
outputDir=GCS_DIRECTORY

次のように置き換えます。

  • JOB_NAME: 一意の任意のジョブ名

    ジョブを Google Cloud コンソールの Spanner の部分に表示するには、ジョブ名を cloud-spanner-export-INSTANCE_ID-DATABASE_ID という形式に一致させる必要があります。

  • VERSION: 使用するテンプレートのバージョン

    使用できる値は次のとおりです。

    • latest: 最新バージョンのテンプレートを使用します。このテンプレートは、バケット内で日付のない親フォルダ(gs://dataflow-templates-REGION_NAME/latest/)にあります。
    • バージョン名(例: 2023-09-12-00_RC00)。特定のバージョンのテンプレートを使用します。このテンプレートは、バケット内で対応する日付の親フォルダ(gs://dataflow-templates-REGION_NAME/)にあります。
  • REGION_NAME: Dataflow ジョブをデプロイするリージョン(例: us-central1
  • GCS_STAGING_LOCATION: 一時ファイルを書き込むパス。例: gs://mybucket/temp
  • INSTANCE_ID: Spanner インスタンス ID
  • DATABASE_ID: Spanner データベース ID
  • GCS_DIRECTORY: Avro ファイルの エクスポート先 になる Cloud Storage のパス

API

REST API を使用してテンプレートを実行するには、HTTP POST リクエストを送信します。API とその認証スコープの詳細については、projects.templates.launch をご覧ください。

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/Cloud_Spanner_to_GCS_Avro
{
   "jobName": "JOB_NAME",
   "parameters": {
       "instanceId": "INSTANCE_ID",
       "databaseId": "DATABASE_ID",
       "outputDir": "gs://GCS_DIRECTORY"
   }
}

次のように置き換えます。

  • PROJECT_ID: Dataflow ジョブを実行する Google Cloud プロジェクトの ID
  • JOB_NAME: 一意の任意のジョブ名

    ジョブを Google Cloud コンソールの Spanner の部分に表示するには、ジョブ名を cloud-spanner-export-INSTANCE_ID-DATABASE_ID という形式に一致させる必要があります。

  • VERSION: 使用するテンプレートのバージョン

    使用できる値は次のとおりです。

    • latest: 最新バージョンのテンプレートを使用します。このテンプレートは、バケット内で日付のない親フォルダ(gs://dataflow-templates-REGION_NAME/latest/)にあります。
    • バージョン名(例: 2023-09-12-00_RC00)。特定のバージョンのテンプレートを使用します。このテンプレートは、バケット内で対応する日付の親フォルダ(gs://dataflow-templates-REGION_NAME/)にあります。
  • LOCATION: Dataflow ジョブをデプロイするリージョン(例: us-central1
  • GCS_STAGING_LOCATION: 一時ファイルを書き込むパス。例: gs://mybucket/temp
  • INSTANCE_ID: Spanner インスタンス ID
  • DATABASE_ID: Spanner データベース ID
  • GCS_DIRECTORY: Avro ファイルの エクスポート先 になる Cloud Storage のパス

次のステップ