Spanner 到 Cloud Storage Avro 範本

「Spanner 到 Cloud Storage 中的 Avro 檔案」範本是一個批次管道,可將整個 Spanner 資料庫以 Avro 格式匯出到 Cloud Storage。匯出 Spanner 資料庫時,系統會在您選取的值區中建立資料夾,其中包含:

  • spanner-export.json 檔案。
  • 您匯出的資料庫中每個資料表各一個 TableName-manifest.json 檔案。
  • 一或多個 TableName.avro-#####-of-##### 檔案。

舉例來說,匯出具有 SingersAlbums 兩個資料表的資料庫時,系統會建立以下檔案集:

  • 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 世界標準時間 Zulu 格式。時間戳記必須是過去的時間,且適用最大時間戳記的過時程度。例如 1990-12-31T23:59:60Z。預設為空白。
  • spannerProjectId:包含您要讀取資料的 Spanner 資料庫的 Google Cloud 專案 ID。
  • shouldExportTimestampAsLogicalType:如果為 true,時間戳記會匯出為 long 類型,並採用 timestamp-micros 邏輯類型。根據預設,這項參數會設為 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 的「Create job from template」(透過範本建立工作) 頁面。
  2. 前往「依據範本建立工作」
  3. 在「工作名稱」欄位中,輸入專屬工作名稱。
  4. 選用:如要使用區域端點,請從下拉式選單中選取值。預設區域為 us-central1

    如需可執行 Dataflow 工作的地區清單,請參閱「Dataflow 位置」。

  5. 從「Dataflow template」(Dataflow 範本) 下拉式選單中選取 the Cloud Spanner to Avro Files on Cloud Storage template。
  6. 在提供的參數欄位中輸入參數值。
  7. 按一下「Run Job」(執行工作)

gcloud

這個範例使用 gcloud dataflow jobs run 指令。

在殼層或終端機中執行範本:

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--INSTANCE_ID-DATABASE_ID 格式。

  • VERSION: 您要使用的範本版本

    您可以使用下列值:

  • 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 工作的專案 ID Google Cloud
  • JOB_NAME: 您選擇的不重複工作名稱

    如要在 Google Cloud 控制台的 Spanner 部分顯示工作,工作名稱必須符合 cloud-spanner--INSTANCE_ID-DATABASE_ID 格式。

  • VERSION: 您要使用的範本版本

    您可以使用下列值:

  • LOCATION: 您要部署 Dataflow 工作的地區,例如 us-central1
  • GCS_STAGING_LOCATION:用於寫入暫存檔案的路徑,例如 gs://mybucket/temp
  • INSTANCE_ID:您的 Spanner 執行個體 ID
  • DATABASE_ID:您的 Spanner 資料庫 ID
  • GCS_DIRECTORY:Avro 檔案的匯出目的地/匯入來源 Cloud Storage 路徑。

後續步驟