Cloud Storage Avro 到 Spanner 範本

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

管道相關規定

  • 必須具備內容空白的目標 Spanner 資料庫。
  • 您要有 Cloud Storage 值區的讀取權限及目標 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 呼叫的請求優先順序。可能的值為 HIGHMEDIUMLOW。預設值為 MEDIUM

執行範本

控制台

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

    如要讓工作顯示在 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 範本) 下拉式選單中選取 the Avro Files on Cloud Storage to Cloud Spanner template。
  6. 在提供的參數欄位中輸入參數值。
  7. 按一下「Run Job」(執行工作)

gcloud

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

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

    您可以使用下列值:

  • 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-LOCATION/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 工作的專案 ID Google Cloud
  • JOB_NAME: 您選擇的不重複工作名稱
  • VERSION: 您要使用的範本版本

    您可以使用下列值:

  • LOCATION: 您要部署 Dataflow 工作的地區,例如 us-central1
  • INSTANCE_ID:包含資料庫的 Spanner 執行個體 ID
  • DATABASE_ID:要匯入資料的 Spanner 資料庫 ID
  • GCS_DIRECTORY:匯入 Avro 檔案的來源 Cloud Storage 路徑,例如 gs://mybucket/somefolder

後續步驟