Spanner 到 Cloud Storage Avro 範本

「Cloud Storage 中的 Spanner 至 Avro 檔案」範本是一種批次管道,可將整個 Spanner 資料庫匯出至 Cloud Storage,並採用 Avro 格式。匯出 Spanner 資料庫時,系統會在您選取的值區中建立資料夾。資料夾內容包括:

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

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

  • 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 bucket 必須存在。
  • 除了執行 Dataflow 工作所需的 Identity and Access Management (IAM) 角色,您也必須具備適當的 IAM 角色,才能讀取 Spanner 資料並寫入 Cloud Storage bucket。

範本參數

必要參數

  • 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 呼叫的要求優先順序。可能的值為 HIGH、MEDIUM 和 LOW。預設值為 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。
  • checksumAlgorithm:匯出檔案要使用的核對和演算法。可能的值為 MD5 和 CRC32C。預設值為 MD5。
  • maxDataBoostParallelism:這項工作允許的 Data Boost 並行要求數量上限。如未設定,範本會查詢專案和區域的 Cloud Spanner Data Boost 配額,如果無法擷取配額,則會改用 400。

執行範本

控制台

  1. 前往 Dataflow 的「Create job from template」(依據範本建立工作) 頁面。
  2. 前往「依範本建立工作」
  3. 在「Job name」(工作名稱) 欄位中,輸入專屬工作名稱。
  4. 選用:如要使用區域端點,請從下拉式選單中選取值。預設區域為 us-central1。

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

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

gcloud

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

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

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates/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:您要使用的範本版本

    您可以使用下列值:

    • latest,使用範本的最新版本,該版本位於 bucket 中非依日期命名的上層資料夾:gs://dataflow-templates/latest/
    • 版本名稱,例如 2023-09-12-00_RC00,可使用特定版本的範本,該範本會以巢狀結構存放在 bucket 中相應的依日期命名的上層資料夾中:gs://dataflow-templates/
  • 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/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--INSTANCE_ID-DATABASE_ID 格式。

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

    您可以使用下列值:

    • latest,使用範本的最新版本,該版本位於 bucket 中非依日期命名的上層資料夾:gs://dataflow-templates/latest/
    • 版本名稱,例如 2023-09-12-00_RC00,可使用特定版本的範本,該範本會以巢狀結構存放在 bucket 中相應的依日期命名的上層資料夾中:gs://dataflow-templates/
  • LOCATION:您要部署 Dataflow 工作的區域,例如 us-central1
  • GCS_STAGING_LOCATION:寫入暫存檔案的路徑,例如 gs://mybucket/temp
  • INSTANCE_ID:Spanner 執行個體 ID
  • DATABASE_ID:您的 Spanner 資料庫 ID
  • GCS_DIRECTORY:Avro 檔案 匯入至的 Cloud Storage 路徑

後續步驟