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 パス。エクスポート ジョブによって、このパスの下にディレクトリが新規作成されます。ここに、エクスポートされたファイルが格納されます。
snapshotTime (省略可)読み取る Spanner データベースのバージョンに対応するタイムスタンプ。タイムスタンプは RFC 3339 UTC Zulu 形式で指定する必要があります。例: 1990-12-31T23:59:60Zタイムスタンプは過去の日付でなければならず、タイムスタンプ ステイルネスの最大値が適用されます。
shouldExportTimestampAsLogicalType (省略可)true の場合、タイムスタンプは、timestamp-micros 論理型の long 型としてエクスポートされます。デフォルトでは、タイムスタンプはナノ秒単位の精度で ISO-8601 文字列としてエクスポートされます。
tableNames (省略可)エクスポートする Spanner データベースのサブセットを指定するテーブルのカンマ区切りリスト。このパラメータを設定する場合は、すべての関連テーブル(親テーブルと外部キーで参照されるテーブル)を含めるか、shouldExportRelatedTables パラメータを true に設定する必要があります。
shouldExportRelatedTables (省略可)関連するテーブルを含めるかどうかを指定します。このパラメータは、tableNames パラメータと組み合わせて使用します。
spannerProjectId (省略可)データを読み取る Spanner データベースの Google Cloud プロジェクト ID。
dataBoostEnabled (省略可)true に設定すると、Spanner Data Boost のコンピューティング リソースを使用してジョブを実行するときに、Spanner OLTP ワークフローへの影響をほぼゼロにすることができます。そのためには spanner.databases.useDataBoost IAM 権限が必要です。詳細については、Data Boost の概要をご覧ください。
avroTempDirectory (省略可)一時的な Avro ファイルが書き込まれる Cloud Storage パス。
spannerPriority (省略可)Cloud Spanner 呼び出しのリクエストの優先度。可能な値は HIGHMEDIUMLOW です。デフォルト値は MEDIUM です。

テンプレートを実行する

コンソール

  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 のパス

次のステップ