Cloud Storage 文字到 Spanner 範本

「Cloud Storage 文字到 Spanner」範本是一種批次管道,可從 Cloud Storage 讀取 CSV 文字檔案,並將這些 CSV 文字檔案匯入 Spanner 資料庫。

管道相關規定

  • 必須具備目標 Spanner 資料庫和資料表。
  • 您要有 Cloud Storage 值區的讀取權限及目標 Spanner 資料庫的寫入權限。
  • 包含 CSV 檔案的輸入 Cloud Storage 路徑必須已存在。
  • 您必須建立包含 CSV 檔案 JSON 說明的匯入資訊清單檔案,且必須將該資訊清單檔案儲存在 Cloud Storage 中。
  • 如果目標 Spanner 資料庫已有結構定義,在資訊清單檔案中指定的任何資料欄都必須具有與目標資料庫結構定義中對應的資料欄相同的資料類型。
  • 使用 ASCII 或 UTF-8 編碼的資訊清單檔案必須符合下列格式:

  • 要匯入的文字檔案必須採用 ASCII 或 UTF-8 編碼的 CSV 格式。我們建議不要在 UTF-8 編碼的檔案中使用位元組順序標記 (BOM)。
  • 資料必須符合下列其中一種類型

    GoogleSQL

        BOOL
        INT64
        FLOAT64
        NUMERIC
        STRING
        DATE
        TIMESTAMP
        BYTES
        JSON

    PostgreSQL

        boolean
        bigint
        double precision
        numeric
        character varying, text
        date
        timestamp with time zone
        bytea

範本參數

必要參數

  • instanceId:Spanner 資料庫的執行個體 ID。
  • databaseId:Spanner 資料庫的資料庫 ID。
  • importManifest:匯入資訊清單檔案時要使用的 Cloud Storage 路徑。例如:gs://your-bucket/your-folder/your-manifest.json

選用參數

  • spannerHost:要在範本中呼叫的 Cloud Spanner 端點。僅供測試。例如,https://batch-spanner.googleapis.com。預設值為:https://batch-spanner.googleapis.com
  • columnDelimiter:來源檔案使用的資料欄分隔符號。預設值為 ,。例如:,
  • fieldQualifier:在包含 columnDelimiter 的來源檔案中,任何值前後應加上的字元。預設值為雙引號。
  • trailingDelimiter:指出來源檔案中的行是否具有結尾的分隔符號,也就是說,在最後一個資料欄值之後,columnDelimiter 字元是否出現在每行的結尾。預設值為 true
  • escape:來源檔案使用的逸出字元。根據預設,此參數並未設定,且範本也不會使用逸出字元。
  • nullString:代表 NULL 值的字串。根據預設,此參數並未設定,且範本也不會使用 NULL 字串。
  • dateFormat:用來剖析日期資料欄的格式。根據預設,管道會嘗試將日期資料欄剖析為 yyyy-M-d[' 00:00:00'],例如 2019-01-312019-1-1 00:00:00。如果日期格式不同,請使用 java.time.format.DateTimeFormatter (https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html) 模式指定格式。
  • timestampFormat:用來剖析時間戳記資料欄的格式。如果時間戳記是長整數,則會解析為 Unix 紀元時間。否則,系統會使用 java.time.format.DateTimeFormatter.ISO_INSTANT (https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html#ISO_INSTANT) 格式將其剖析為字串。如為其他情況,請指定您自己的模式字串,例如使用 MMM dd yyyy HH:mm:ss.SSSVVJan 21 1998 01:02:03.456+08:00 的形式呈現時間戳記。
  • spannerProjectId:包含 Spanner 資料庫的 Google Cloud 專案 ID。如未設定,系統會使用預設 Google Cloud 專案的專案 ID。
  • spannerPriority:Spanner 呼叫的請求優先順序。可能的值為 HIGHMEDIUMLOW。預設值為 MEDIUM
  • handleNewLine:如果為 true,輸入資料可包含換行符號字元。否則,換行字元會導致錯誤。預設值為 false。啟用換行符處理功能可能會降低效能。
  • invalidOutputPath:寫入無法匯入的資料列時要使用的 Cloud Storage 路徑。例如,gs://your-bucket/your-path。預設為空白。

如果您需要使用自訂的日期或時間戳記格式,請確保其為有效的 java.time.format.DateTimeFormatter 模式。下表顯示日期和時間戳記資料欄的其他自訂格式範例:

類型 輸入值 格式 備註
DATE 2011-3-31 根據預設,範本可以剖析此格式。您不需要指定 dateFormat 參數。
DATE 2011-3-31 00:00:00 根據預設,範本可以剖析此格式。您不需要指定格式。如有需要,您可以使用 yyyy-M-d' 00:00:00'
DATE 01 Apr, 18 dd MMM, yy
DATE Wednesday, April 3, 2019 AD EEEE, LLLL d, yyyy G
TIMESTAMP 2019-01-02T11:22:33Z
2019-01-02T11:22:33.123Z
2019-01-02T11:22:33.12356789Z
預設格式 ISO_INSTANT 可以剖析這類型的時間戳記。您不需要提供 timestampFormat 參數。
TIMESTAMP 1568402363 根據預設,範本可以剖析此類型的時間戳記,並將其視為 Unix 紀元時間。
TIMESTAMP Tue, 3 Jun 2008 11:05:30 GMT EEE, d MMM yyyy HH:mm:ss VV
TIMESTAMP 2018/12/31 110530.123PST yyyy/MM/dd HHmmss.SSSz
TIMESTAMP 2019-01-02T11:22:33Z 或 2019-01-02T11:22:33.123Z yyyy-MM-dd'T'HH:mm:ss[.SSS]VV 如果輸入資料欄混合使用 2019-01-02T11:22:33Z 與 2019-01-02T11:22:33.123Z,則預設格式可以剖析這種類型的時間戳記。您不需要提供自己的格式參數。您可以使用 yyyy-MM-dd'T'HH:mm:ss[.SSS]VV 來處理這兩種情況。您無法使用 yyyy-MM-dd'T'HH:mm:ss[.SSS]'Z',因為後置字元「Z」必須以時區 ID 進行剖析,而非使用字元常值。在系統內部,時間戳記資料欄會轉換為 java.time.Instant。因此,其必須以世界標準時間指定,或具有與其相關的時區資訊。當地日期時間 (例如 2019-01-02 11:22:33) 無法剖析為有效的 java.time.Instant

執行範本

控制台

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

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

  5. 從「Dataflow template」(Dataflow 範本) 下拉式選單中選取 the Text 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_Text_to_Cloud_Spanner \
    --region REGION_NAME \
    --parameters \
instanceId=INSTANCE_ID,\
databaseId=DATABASE_ID,\
importManifest=GCS_PATH_TO_IMPORT_MANIFEST

更改下列內容:

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

    您可以使用下列值:

  • REGION_NAME: 您要部署 Dataflow 工作的地區,例如 us-central1
  • INSTANCE_ID:您的 Spanner 執行個體 ID
  • DATABASE_ID:您的 Spanner 資料庫 ID
  • GCS_PATH_TO_IMPORT_MANIFEST:匯入資訊清單檔案的 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/GCS_Text_to_Cloud_Spanner
{
   "jobName": "JOB_NAME",
   "parameters": {
       "instanceId": "INSTANCE_ID",
       "databaseId": "DATABASE_ID",
       "importManifest": "GCS_PATH_TO_IMPORT_MANIFEST"
   },
   "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_PATH_TO_IMPORT_MANIFEST:匯入資訊清單檔案的 Cloud Storage 路徑

後續步驟