從非 Cloud Spanner 資料庫匯入資料

本頁面說明如何準備從非 Cloud Spanner 資料庫匯出 Avro 檔案,然後將這些檔案匯入 Cloud Spanner。如要匯入之前匯出的 Cloud Spanner 資料庫,請參閱匯入 Cloud Spanner Avro 檔案

這個程序會利用 Cloud Dataflow,從包含 JSON 資訊清單檔案和一組 Avro 檔案Cloud Storage 值區匯入資料。

事前準備

如要匯入資料庫,您必須先啟用 Cloud Spanner、Cloud Storage、Compute Engine 和 Cloud Dataflow API:

啟用 API

此外,您也需要足夠的配額和必要的 Cloud IAM 權限。

配額需求

GCP 服務對匯入工作的配額需求如下:

  • Cloud Spanner:您必須要有足夠的節點來支援匯入的資料量。匯入資料庫本身不需任何額外節點,不過您可能需要新增更多節點,以便在合理的時間內完成工作。詳情請參閱工作最佳化一節。
  • Cloud Storage:您必須要有一個包含先前匯出檔案的值區。您不需要為值區設定大小。
  • Cloud Dataflow:匯出工作在 CPU、磁碟用量和 IP 位址方面的 Compute Engine 配額限制與其他 Cloud Dataflow 工作相同。
  • Compute Engine:執行匯入工作前,您必須先為 Compute Engine 設定初始配額,以供 Cloud Dataflow 使用。這些配額代表您允許 Cloud Dataflow 為工作擴充資源數量的「上限」。我們建議的起始值如下:

    • CPU:200
    • 使用中的 IP 位址:200
    • 標準永久磁碟:50 TB

    一般來說,您不需再進行其他調整,Cloud Dataflow 會自動調度資源,因此您只要支付匯入期間實際用到的資源費用。如果您的工作可能會使用更多資源,Cloud Dataflow UI 將出現警告圖示,在此情況下工作仍可順利完成。

Cloud IAM 需求

如要匯入資料庫,您還需要具備足夠權限的 Cloud IAM 角色,才能使用匯入工作涉及的所有服務。如需瞭解如何授予角色和權限,請參閱套用身分與存取權管理角色

如要匯入資料庫,您需要以下角色:

  • GCP 專案層級:
    • Cloud Spanner 檢視者
    • Cloud Dataflow 管理員
    • 儲存空間管理員
  • Cloud Spanner 資料庫或執行個體層級,或者 GCP 專案層級:
    • Cloud Spanner 資料庫管理員

將資料從非 Cloud Spanner 資料庫匯出至 Avro 檔案

匯入程序可從位於 Cloud Storage 值區的 Avro 檔案匯入資料。您可以從任何來源以 Avro 格式匯出資料,並使用任何可用的方法來執行此操作。

匯出資料時請注意下列幾點:

  • 您可以使用任何 Avro 原始類型以及陣列複合類型進行匯出。
  • Avro 檔案中的每個資料欄都必須使用下列其中一種資料欄類型:

    • ARRAY
    • BOOL
    • BYTES
    • DOUBLE
    • FLOAT
    • INT
    • LONG*
    • STRING*

    *您可以匯入儲存時間戳記的 LONGSTRING 做為 Cloud Spanner 的 TIMESTAMP;詳情請參閱下文的建議對應

  • 匯出 Avro 檔案時無須納入或產生任何中繼資料。

  • 無須遵循任何檔案的特殊命名慣例。

如未將檔案直接匯出至 Cloud Storage,您必須將 Avro 檔案上傳到 Cloud Storage 值區。如需詳細的操作說明,請參閱上傳物件

建立 Cloud Spanner 資料庫的結構定義

執行匯入之前,您必須在 Cloud Spanner 中建立目標資料表並進行結構定義。

針對 Avro 檔案中每個資料欄,您必須使用適當資料欄類型的結構定義。

Avro 資料欄類型 Cloud Spanner 資料欄類型
ARRAY ARRAY
BOOL BOOL
BYTES BYTES
DOUBLE FLOAT64
FLOAT FLOAT64
INT INT64
LONG

INT64

TIMESTAMP (當 LONG 表示自 1970-01-01 00:00:00 UTC 起的微秒數時間戳記)

STRING

STRING

TIMESTAMP (當 STRING 表示 SQL 查詢的標準格式中的時間戳記)

我們建議您在將資料匯入 Cloud Spanner 後才建立次要索引,而非在一開始為資料表建立結構定義時就建立。

建立 spanner-export.json 檔案

您也必須在 Cloud Storage 值區建立名稱為 spanner-export.json 的檔案。這個檔案包含 tables 陣列,會列出每個資料表的名稱和資料檔案位置。

檔案內容有以下格式:

{
  "tables": [
   {
    "name": "TABLE1",
    "dataFiles": [
      "RELATIVE/PATH/TO/TABLE1_FILE1",
      "RELATIVE/PATH/TO/TABLE1_FILE2"
    ]
   },
   {
    "name": "TABLE2",
    "dataFiles": ["RELATIVE/PATH/TO/TABLE2_FILE1"]
   }
  ]
}

使用 gcloud 執行 Cloud Dataflow 匯入工作

如要開始匯入工作,請依照 gcloud 指令列工具的操作說明,使用 從 Avro 到 Cloud Spanner 範本來執行工作。

開始匯入工作之後,您可以在 GCP 主控台中查看工作的詳細資料

完成匯入工作之後,新增必要的次要索引

針對匯入工作選擇地區

根據 Cloud Spanner 值區採用的是地區設定或多地區設定,來選擇不同的地區。如要避免產生網路輸出費用,請選擇與 Cloud Storage 值區位置重疊的地區。

地區值區位置

如果您的 Cloud Storage 值區位置採用地區設定,請為匯入工作選擇相同地區,以利用免費網路用量

如果沒有相同的地區可供選擇,系統將向您收取輸出費用。在此情況下,請參閱 Cloud Storage 網路輸出定價資訊,以選擇網路輸出費用最低的地區。

多地區值區位置

如果您的 Cloud Storage 值區位置採用多地區設定,請從構成多地區位置的地區中選擇一個地區,以利用免費網路用量

如果沒有重疊的地區可供選擇,系統將向您收取輸出費用。在此情況下,請參閱 Cloud Storage 網路輸出定價資訊,以選擇網路輸出費用最低的地區。

在 Cloud Dataflow UI 中查看工作或排解工作問題

開始匯入工作後,您可以在 GCP 主控台的 Cloud Dataflow 區段中查看工作詳細資料,包括記錄檔。

查看 Cloud Dataflow 工作詳細資料

如何查看目前正在執行的工作詳細資料:

  1. 前往您匯入的資料庫的「Database details」(資料庫詳細資料) 頁面。
  2. 按一下工作狀態訊息中的 [View job details in Cloud Dataflow] (在 Cloud Dataflow 中查看工作詳細資料)

    處理中工作的狀態訊息

    GCP 主控台會顯示該 Cloud Dataflow 工作的詳細資料。

如何查看最近執行的工作:

  1. 前往您匯入的資料庫的「Database details」(資料庫詳細資料) 頁面。
  2. 按一下 [Import/Export] (匯入/匯出) 分頁標籤。
  3. 在清單中按一下工作名稱。

    GCP 主控台會顯示該 Cloud Dataflow 工作的詳細資料。

如何查看超過一週前執行的工作:

  1. 前往 GCP 主控台的 Cloud Dataflow 工作頁面。
    前往工作頁面
  2. 在清單中找出您的工作,然後按一下工作名稱。

    GCP 主控台會顯示該 Cloud Dataflow 工作的詳細資料。

查看工作的 Cloud Dataflow 記錄檔

如要查看 Cloud Dataflow 工作記錄檔,請按照上方說明前往工作的詳細資料頁面,然後按一下工作名稱右側的 [Logs] (記錄)

如有工作失敗,請在記錄檔中尋找錯誤。如果有錯誤,[Logs] (記錄) 旁邊會顯示錯誤計數:

「Logs」(記錄) 按鈕旁邊的錯誤計數範例

如何查看工作錯誤:

  1. 按一下 [Logs] (記錄) 旁的錯誤計數。

    GCP 主控台會顯示工作的記錄。您可能需要捲動頁面,才能看到錯誤。

  2. 找出帶有錯誤圖示 錯誤圖示 的項目。

  3. 按一下個別記錄項目,即可展開其中內容。

如要進一步瞭解如何排解 Cloud Dataflow 工作的問題,請參閱排解管道問題

對速度緩慢的匯入工作進行最佳化

如果您已按照初始設定的建議操作,通常不需要再進行其他調整。如果工作執行速度緩慢,您可嘗試下列其他最佳化處理做法:

  • 為工作和資料選擇最佳位置:在 Cloud Spanner 執行個體和 Cloud Storage 值區位置的相同地區執行 Cloud Dataflow 工作。

  • 確保您有足夠的 Cloud Dataflow 資源:如果相關的 Compute Engine 配額限制了 Cloud Dataflow 工作資源,該工作在 Google Cloud Platform 主控台的 Cloud Dataflow 頁面會顯示警告圖示 警告圖示 和記錄訊息:

    配額限制警告的螢幕擷取畫面

    在此情況下,針對 CPU、使用中的 IP 位址和標準永久磁碟增加配額或許可以縮短工作執行時間,但您可能要支付更多 Compute Engine 費用。

  • 檢查 Cloud Spanner CPU 使用率:如果您發現執行個體的 CPU 使用率超過 65%,則可增加該執行個體中的節點數量。額外的節點可增添更多 Cloud Spanner 資源,並加快工作執行速度,不過 Cloud Spanner 費用也會隨之提高。

影響匯入工作效能的因素

下列幾個因素會影響完成匯入工作所需的時間。

  • Cloud Spanner 資料庫大小:處理更多資料的同時也需要較多時間和資源。

  • Cloud Spanner 資料庫結構定義 (包括索引):資料表數量、資料列大小和次要索引數量都會影響匯入工作所需的執行時間。

  • 資料位置:資料會透過 Cloud Dataflow 在 Cloud Spanner 和 Cloud Storage 之間轉移,比較理想的情況是這三個元件都位在同個地區。如果這些元件位在不同地區,在各地區間移動資料將拖慢工作的執行速度。

  • Cloud Dataflow 工作站數量:Cloud Dataflow 可使用自動調度資源,根據需要處理的工作量選擇工作站數量。不過,工作站數量會以 CPU、使用中的 IP 位址和標準永久磁碟的配額做為上限。當工作站數量達到配額上限時,Cloud Dataflow UI 會出現警告圖示,此時的處理速度相對較為緩慢,不過工作仍可順利完成。

  • Cloud Spanner 的現有負載:匯入工作會大幅加重 Cloud Spanner 執行個體上CPU 的負載。如果該執行個體原本已有大量負載,匯出工作的執行速度則會減慢。

  • Cloud Spanner 節點數量:如果執行個體的 CPU 使用率超過 65%,工作執行速度會減慢。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Spanner 說明文件