「SourceDB 到 Spanner」範本是一個批次管道,可將資料從關聯資料庫複製到現有的 Spanner 資料庫,並且使用 JDBC 來連結關聯式資料庫。您可以使用這個範本,將任何具備可用 JDBC 驅動程式的關聯式資料庫資料複製到 Spanner。這項功能僅支援部分 MySQL 類型
為了增加多一層安全防護,您也可以傳遞 Cloud KMS 金鑰,以及使用 Cloud KMS 金鑰加密的 Base64 編碼使用者名稱、密碼和連線字串參數。如要進一步瞭解如何加密使用者名稱、密碼和連線字串參數,請參閱 Cloud KMS API 加密端點。
管道相關規定
- 關聯式資料庫的 JDBC 驅動程式必須可供使用。
- 執行管道前,Spanner 資料表必須已存在。
- Spanner 資料表必須具備相容的結構定義。
- 關聯式資料庫必須可從 Dataflow 執行的子網路存取。
範本參數
必要參數
- sourceConfigURL:來源連線設定檔的網址。檔案格式取決於來源類型。如果是 Astra,則會指向 Astra 連線設定檔 (範例)。如果是 JDBC,則會指向 JDBC 分片設定檔 (範例)。如果是 Cassandra,則會指向 Cassandra 驅動程式設定檔 (範例)。這是必要參數。例如
gs://your-bucket/source-config.json。預設為空白。 - instanceId:目的地 Cloud Spanner 執行個體。
- databaseId:目的地 Cloud Spanner 資料庫。
- projectId:這是 Cloud Spanner 專案的名稱。
- outputDirectory:這個目錄用於傾印遷移作業中失敗/略過/篩選的記錄。
選用參數
- sourceDbDialect:可能的值為
CASSANDRA、MYSQL、POSTGRESQL、ORACLE和SQLSERVER。預設值為:MYSQL。 - jdbcDriverJars:以半形逗號分隔的驅動程式 JAR 檔案清單。例如,
gs://your-bucket/driver_jar1.jar,gs://your-bucket/driver_jar2.jar。預設為空白。 - jdbcDriverClassName:JDBC 驅動程式類別名稱。例如,
com.mysql.jdbc.Driver。預設值為:com.mysql.jdbc.Driver。 - 資料表:要從來源遷移的資料表。預設為空白。
- numPartitions:分區數量。這項值會與上下限一起形成分區步幅,用於產生 WHERE 子句運算式,平均分割分區資料欄。如果輸入的值小於 1,系統會將數字設為 1。預設為:0。
- fetchSize:從 JDBC 來源讀取資料時,每頁要擷取的資料列數。如未設定,系統會根據工作站機型和預估的資料列大小自動推斷,如果無法推斷 (例如未指定工作站機型),則會改為 50,000 列。如果來源方言是 MySQL,請參閱下方注意事項。這最終會轉換為 Jdbc 層的 Statement.setFetchSize 呼叫。只有在預設值擲回記憶體錯誤時,才應使用這個屬性。MySQL 來源注意事項:除非
useCursorFetch=true也是連線屬性的一部分,否則 MySQL 連接器會忽略 FetchSize。如果是 MySQL 方言,除非 fetchSize 參數明確設為 0,否則管道會預設在連線屬性中加入useCursorFetch=true。 - spannerHost:要在範本中呼叫的 Cloud Spanner 端點。例如,
https://batch-spanner.googleapis.com。預設值為:https://batch-spanner.googleapis.com。 - maxConnections:在每個工作站上設定 JDBC 連線集區,並指定連線數量上限。如要設為無限制,請使用負數。例如,
-1。預設為:0。 - sessionFilePath:Cloud Storage 中的工作階段檔案路徑,內含 Spanner 遷移工具的對應資訊。預設為空白。
- transformationJarPath:Cloud Storage 中的自訂 JAR 位置,內含用於處理記錄的自訂轉換邏輯。預設為空白。
- transformationClassName:具有自訂轉換邏輯的完整類別名稱。如果指定 transformationJarPath,這個欄位就必須填寫。預設為空白。
- transformationCustomParameters:字串,內含要傳遞至自訂轉換類別的任何自訂參數。預設為空白。
- insertOnlyModeForSpannerMutations:根據預設,管道會使用 Upsert 將資料列寫入 Spanner。也就是說,現有資料列會遭到覆寫。如果啟用 InsertOnly 模式,系統會使用插入作業,而非 upsert 作業,且不會覆寫現有資料列。
- batchSizeForSpannerMutations:Spanner Mutations 的批次大小 (以位元組為單位)。如果設定的值小於 0,系統會使用 Apache Beam 的 SpannerIO 預設值 (1 MB)。如要停用批次處理變動,請將此值設為 0 或 10。
- spannerPriority:Cloud Spanner 呼叫的要求優先順序。值必須是 [
HIGH、MEDIUM、LOW] 其中之一。預設為HIGH。 - tableOverrides:這是從來源到 Spanner 的資料表名稱覆寫。格式如下:[{SourceTableName1, SpannerTableName1}, {SourceTableName2, SpannerTableName2}]這個範例顯示將 Singers 資料表對應至 Vocalists,並將 Albums 資料表對應至 Records。例如,
[{Singers, Vocalists}, {Albums, Records}]。預設為空白。 - columnOverrides:這是從來源到 Spanner 的資料欄名稱覆寫。格式如下:[{SourceTableName1.SourceColumnName1, SourceTableName1.SpannerColumnName1}, {SourceTableName2.SourceColumnName1, SourceTableName2.SpannerColumnName1}]請注意,來源和 Spanner 配對中的 SourceTableName 應保持不變。如要覆寫資料表名稱,請使用 tableOverrides。以下範例分別在 Singers 和 Albums 資料表中,將 SingerName 對應至 TalentName,並將 AlbumName 對應至 RecordName。例如,
[{Singers.SingerName, Singers.TalentName}, {Albums.AlbumName, Albums.RecordName}]。預設為空白。 - schemaOverridesFilePath:這個檔案會指定從來源到 Spanner 的資料表和資料欄名稱覆寫。預設為空白。
- uniformizationStageCountHint:標準化階段數提示。目前僅適用於以 JDBC 為基礎的來源,例如 MySQL 或 PostgreSQL。如要停用統一化功能,請保留 0 或預設值。如要設定 log(numPartition) 個階段,請設為 -1。如果來源主鍵空間平均分配 (例如有稀疏洞的自動遞增鍵),建議保持停用。如果鍵空間不一致,您可能會在資料流執行作業中遇到落後的 VM。在這種情況下,您可以將其設為 -1 來啟用統一化。手動將值設為 0 或 -1 以外的值,有助於微調統一化階段新增的額外負荷,以及因工作分配更完善而帶來的效能提升。
- failureInjectionParameter:失敗注入參數。僅供測試。預設為空白。
- maxCommitDelay:在 Spanner 中,為最佳化寫入處理量而設定的交易延遲時間上限。請參閱 https://cloud.google.com/spanner/docs/throughput-optimized-writes.Set -1,讓 Spanner 選擇預設值。設為正值,即可覆寫,以取得最適合的處理量與延遲時間之間的取捨。預設值為 -1。
- gcsOutputDirectory:這個目錄用於寫入從來源讀取的記錄 AVRO 檔案。例如,
gs://your-bucket/your-path。預設為空白。 - disabledAlgorithms:以半形逗號分隔要停用的演算法。如果將這個值設為
none,系統就不會停用任何演算法。請謹慎使用這個參數,因為預設停用的演算法可能存在安全漏洞或效能問題。例如:SSLv3, RC4。 - extraFilesToStage:以半形逗號分隔的 Cloud Storage 路徑或 Secret Manager 密鑰,用於在工作站中暫存檔案。這些檔案會儲存在每個工作人員的 /extra_files 目錄中。例如:
gs://<BUCKET_NAME>/file.txt,projects/<PROJECT_ID>/secrets/<SECRET_ID>/versions/<VERSION_ID>。
執行範本
控制台
- 前往 Dataflow 的「Create job from template」(依據範本建立工作) 頁面。 前往「依範本建立工作」
- 在「Job name」(工作名稱) 欄位中,輸入專屬工作名稱。
- 選用:如要使用區域端點,請從下拉式選單中選取值。預設區域為
us-central1。如需可執行 Dataflow 工作的區域清單,請參閱「Dataflow 位置」。
- 從「Dataflow template」(Dataflow 範本) 下拉式選單中,選取「Sourcedb to Spanner」(從 SourceDB 遷移至 Spanner) 範本。
- 在提供的參數欄位中輸入參數值。
- 按一下「Run Job」(執行工作)。
gcloud CLI
在殼層或終端機中執行範本:
gcloud dataflow flex-template run JOB_NAME \ --template-file-gcs-location=gs://dataflow-templates/VERSION/flex/Sourcedb_to_Spanner_Flex \ --project=PROJECT_ID \ --region=REGION_NAME \ --parameters \ sourceConfigURL=SOURCE_CONFIG_URL,\ instanceId=INSTANCE_ID,\ databaseId=DATABASE_ID,\ projectId=PROJECT_ID,\ outputDirectory=OUTPUT_DIRECTORY,\
更改下列內容:
JOB_NAME:您選擇的不重複工作名稱VERSION:您要使用的範本版本您可以使用下列值:
latest,使用範本的最新版本,該版本位於 bucket 中非依日期命名的上層資料夾:gs://dataflow-templates/latest/- 版本名稱,例如
2023-09-12-00_RC00,可使用特定版本的範本,該範本會以巢狀結構存放在 bucket 中相應的依日期命名上層資料夾中:gs://dataflow-templates/
REGION_NAME:您要部署 Dataflow 工作的區域,例如us-central1SOURCE_CONFIG_URL:用來連線至來源資料庫主機的網址。可以是 1. JDBC 連線網址 - 必須包含主機、通訊埠和來源資料庫名稱,且可選擇性包含 autoReconnect、maxReconnects 等屬性。格式:`jdbc:mysql://{host}:{port}/{dbName}?{parameters}`2. 分片設定路徑INSTANCE_ID:Cloud Spanner 執行個體 ID。DATABASE_ID:Cloud Spanner 資料庫 ID。PROJECT_ID:Cloud Spanner 專案 ID。OUTPUT_DIRECTORY:失敗/略過/篩選事件的輸出目錄
API
如要使用 REST API 執行範本,請傳送 HTTP POST 要求。如要進一步瞭解 API 和授權範圍,請參閱 projects.templates.launch。
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launchParameter": { "jobName": "JOB_NAME", "parameters": { "sourceConfigURL": "SOURCE_CONFIG_URL", "instanceId": "INSTANCE_ID", "databaseId": "DATABASE_ID", "projectId": "PROJECT_ID", "outputDirectory": "OUTPUT_DIRECTORY", }, "containerSpecGcsPath": "gs://dataflow-templates/VERSION/flex/Sourcedb_to_Spanner_Flex", "environment": { "maxWorkers": "10" } } }
更改下列內容:
PROJECT_ID:您要執行 Dataflow 工作的 Google Cloud 專案 IDJOB_NAME:您選擇的不重複工作名稱VERSION:您要使用的範本版本您可以使用下列值:
latest,使用範本的最新版本,該版本位於 bucket 中非依日期命名的上層資料夾:gs://dataflow-templates/latest/- 版本名稱,例如
2023-09-12-00_RC00,可使用特定版本的範本,該範本會以巢狀結構存放在 bucket 中相應的依日期命名上層資料夾中:gs://dataflow-templates/
LOCATION:您要部署 Dataflow 工作的區域,例如us-central1SOURCE_CONFIG_URL:用來連線至來源資料庫主機的網址。可以是 1. JDBC 連線網址 - 必須包含主機、通訊埠和來源資料庫名稱,且可選擇性包含 autoReconnect、maxReconnects 等屬性。格式:`jdbc:mysql://{host}:{port}/{dbName}?{parameters}`2. 分片設定路徑INSTANCE_ID:Cloud Spanner 執行個體 ID。DATABASE_ID:Cloud Spanner 資料庫 ID。PROJECT_ID:Cloud Spanner 專案 ID。OUTPUT_DIRECTORY:失敗/略過/篩選事件的輸出目錄