「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-31
或2019-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.SSSVV
以Jan 21 1998 01:02:03.456+08:00
的形式呈現時間戳記。 - spannerProjectId:包含 Spanner 資料庫的 Google Cloud 專案 ID。如未設定,系統會使用預設 Google Cloud 專案的專案 ID。
- spannerPriority:Spanner 呼叫的請求優先順序。可能的值為
HIGH
、MEDIUM
和LOW
。預設值為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 。 |
執行範本
控制台
- 前往 Dataflow 的「Create job from template」(透過範本建立工作) 頁面。 前往「依據範本建立工作」
- 在「工作名稱」欄位中,輸入專屬工作名稱。
- 選用:如要使用區域端點,請從下拉式選單中選取值。預設區域為
us-central1
。如需可執行 Dataflow 工作的地區清單,請參閱「Dataflow 位置」。
- 從「Dataflow template」(Dataflow 範本) 下拉式選單中選取 the Text Files on Cloud Storage to Cloud Spanner template。
- 在提供的參數欄位中輸入參數值。
- 按一下「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
: 您要使用的範本版本您可以使用下列值:
latest
,使用範本的最新版本,該版本位於值區中非依日期命名的上層資料夾:gs://dataflow-templates-REGION_NAME/latest/- 版本名稱 (例如
2023-09-12-00_RC00
),用於指定範本版本,該版本會以巢狀結構存放在值區中依日期命名的上層資料夾中:gs://dataflow-templates-REGION_NAME/
REGION_NAME
: 您要部署 Dataflow 工作的地區,例如us-central1
INSTANCE_ID
:您的 Spanner 執行個體 IDDATABASE_ID
:您的 Spanner 資料庫 IDGCS_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 CloudJOB_NAME
: 您選擇的不重複工作名稱VERSION
: 您要使用的範本版本您可以使用下列值:
latest
,使用範本的最新版本,該版本位於值區中非依日期命名的上層資料夾:gs://dataflow-templates-REGION_NAME/latest/- 版本名稱 (例如
2023-09-12-00_RC00
),用於指定範本版本,該版本會以巢狀結構存放在值區中依日期命名的上層資料夾中:gs://dataflow-templates-REGION_NAME/
LOCATION
: 您要部署 Dataflow 工作的地區,例如us-central1
INSTANCE_ID
:您的 Spanner 執行個體 IDDATABASE_ID
:您的 Spanner 資料庫 IDGCS_PATH_TO_IMPORT_MANIFEST
:匯入資訊清單檔案的 Cloud Storage 路徑
後續步驟
- 瞭解 Dataflow 範本。
- 請參閱 Google 提供的範本清單。