Cloud Storage Avro 到 Spanner 範本

「Cloud Storage Avro 檔案到 Spanner」範本是一個批次管道,可從 Cloud Storage 讀取從 Spanner 匯出的 Avro 檔案,再匯入 Spanner 資料庫。

管道相關規定

  • 必須具備內容空白的目標 Spanner 資料庫。
  • 您要有 Cloud Storage bucket 的讀取權限及目標 Spanner 資料庫的寫入權限。
  • 輸入 Cloud Storage 路徑必須已存在,且其中必須包含 spanner-export.json 檔案 (內含要匯入檔案的 JSON 說明)。
  • 如果來源 Avro 檔案不含主鍵,您必須先建立含主鍵的空白 Spanner 資料表,才能執行範本。如果 Avro 檔案定義了主鍵,則不必執行這個步驟。

範本參數

必要參數

  • instanceId:Spanner 資料庫的執行個體 ID。
  • databaseId:Spanner 資料庫的資料庫 ID。
  • inputDir:從中匯入 Avro 檔案的 Cloud Storage 路徑。

選用參數

  • spannerHost:要在範本中呼叫的 Cloud Spanner 端點。僅供測試。例如:https://batch-spanner.googleapis.com。預設值為:https://batch-spanner.googleapis.com。
  • waitForIndexes:如果為 true,管道會等待索引建立完成。如果為 false,工作可能會在背景建立索引時完成。預設值為 false。
  • waitForForeignKeys:如果是 true,管道會等待外鍵建立完成。如果 false,工作可能會在背景建立外鍵時完成。預設值為 false。
  • waitForChangeStreams:如果是 true,管道會等待建立變更串流。如果 false,工作可能會在背景建立變更串流時完成。預設值為 true。
  • waitForSequences:根據預設,匯入管道會在建立序列時遭到封鎖。如果 false,匯入管道可能會完成,但序列仍在背景建立中。
  • earlyIndexCreateFlag:指定是否啟用早期索引建立功能。如果範本會執行大量 DDL 陳述式,建議您先建立索引,再載入資料,這樣效率會比較高。因此,當 DDL 陳述式的數量超過門檻時,預設行為是先建立索引。如要停用這項功能,請將 earlyIndexCreateFlag 設為 false。預設值為 true。
  • spannerProjectId:包含 Spanner 資料庫的 Google Cloud 專案 ID。如未設定,系統會使用預設 Google Cloud 雲端專案。
  • ddlCreationTimeoutInMinutes:範本執行的 DDL 陳述式逾時時間 (以分鐘為單位)。預設值為 30 分鐘。
  • spannerPriority:Spanner 呼叫的要求優先順序。可能的值為 HIGH、MEDIUM 和 LOW。預設值為 MEDIUM。
  • earlyIndexCreateThreshold:索引和外鍵的數量門檻,決定是否要在載入資料前建立索引。如果索引和外部索引鍵的總數超過這個門檻,系統會在匯入資料前建立這些索引鍵,以提升效能。預設值為 40。
  • runIndexDdlInParallel:如果為 true,管道會平行執行索引建立 DDL 陳述式。預設值為 false。

執行範本

控制台

  1. 前往 Dataflow 的「Create job from template」(依據範本建立工作) 頁面。
  2. 前往「依範本建立工作」
  3. 在「Job name」(工作名稱) 欄位中,輸入專屬工作名稱。

    如要讓工作顯示在 Google Cloud 控制台的 Spanner「執行個體」頁面中,工作名稱必須符合下列格式:

    cloud-spanner-import-SPANNER_INSTANCE_ID-SPANNER_DATABASE_NAME

    更改下列內容:

    • SPANNER_INSTANCE_ID:Spanner 執行個體的 ID
    • SPANNER_DATABASE_NAME:Spanner 資料庫名稱
  4. 選用:如要使用區域端點,請從下拉式選單中選取值。預設區域為 us-central1。

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

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

gcloud

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

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

更改下列內容:

  • JOB_NAME:您選擇的不重複工作名稱
  • VERSION:您要使用的範本版本

    您可以使用下列值:

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

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/GCS_Avro_to_Cloud_Spanner
{
   "jobName": "JOB_NAME",
   "parameters": {
       "instanceId": "INSTANCE_ID",
       "databaseId": "DATABASE_ID",
       "inputDir": "gs://GCS_DIRECTORY"
   },
   "environment": {
       "machineType": "n1-standard-2"
   }
}

更改下列內容:

  • PROJECT_ID:您要執行 Dataflow 工作的 Google Cloud 專案 ID
  • JOB_NAME:您選擇的不重複工作名稱
  • VERSION:您要使用的範本版本

    您可以使用下列值:

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

後續步驟