本文為您介紹遷移/同步對象匹配規則的背景資訊、使用限制、配置方式,以及庫到庫情境樣本和常見問題。
背景資訊
您在建立資料移轉或資料同步任務時,需要指定具體的遷移或同步的對象。資料轉送提供指定對象、匯入對象和匹配規則三種方式供您選擇。其中匹配規則方式支援您通過編寫通配規則指定需要遷移或同步的對象,並且支援配置源端及目標端的對象映射邏輯,通過簡單、高效的字串匹配能力,可以有效地降低您在待遷移/同步對象數量眾多時的配置難度。同時,符合匹配規則的新增表可以通過增量 DDL 的方式自動同步至目標端。資料移轉增量 DDL 的詳情請參見 同步 DDL 的支援範圍和使用限制。
庫到庫的通配規則說明
資料轉送支援的資料庫到資料庫的通配規則及其要求如下。
下方表格中的星號(*)表示通配規則。
類別 | 支援的通配規則 | 樣本 | 說明 |
庫表平遷 | *.* | kd_test*.person* | 將源端 kd_test 開頭的所有庫下 person 開頭的所有表遷移至目標端,庫名、表名保持不變。 |
*.<源端表> | kd_test*.person | 將源端 kd_test 開頭的所有庫下 person 表遷移至目標端,庫名、表名保持不變。 | |
<源端庫>.* | kd_test.person* | 將源端名為 kd_test 的庫下 person 開頭的所有表遷移至目標端,庫名、表名保持不變。 | |
<源端庫>.<源端表> | kd_test.person | 將源端名為 kd_test 的庫下名為 person 的表遷移至目標端,庫名、表名保持不變。 | |
庫表重新命名 | <源端庫>.<源端表>=<目標端庫>.<目標端表> | kd_test.person=kd_test_new.person_new | 將源端名為 kd_test 的庫下名為 person 的表遷移至目標端,並且將庫 kd_test 重新命名為 kd_test_new,表 person 重新命名為 person_new。 |
<源端庫>.*=<目標端庫>.* | kd_test.person*=kd_test_new.person* | 將源端名為 kd_test 的庫下 person 開頭的所有表遷移至目標端,並且將庫 kd_test 重新命名為 kd_test_new,表名保持不變。 | |
*.<源端表>=*.<目標端表> | kd_test*.person=kd_test*.person_new | 將源端 kd_test 開頭的所有庫下名為 person 的表遷移至目標端,並且將表 person 重新命名為 person_new,庫名保持不變。 | |
庫表匯聚 | <源端庫>.*=<目標端庫>.<目標端表> | kd_test.person*=kd_test.person_all | 將源端名為 kd_test 的庫下 person 開頭的所有表匯聚至目標端庫 kd_test 下的表 person_all 中。 |
*.<源端表>=<目標端庫>.<目標端表> | kd_test*.person=kd_test_all.person | 將源端以 kd_test 開頭的所有庫下名為 person 的表匯聚至目標端庫 kd_test_all 下的表 person 中。 | |
*.*=<目標端庫>.<目標端表> | kd_test*.person*=kd_test_all.person_all | 將源端以 kd_test 開頭的所有庫下以 person 開頭的所有表匯聚至目標端庫 kd_test_all 下的表 person_all 中。 | |
*.*=<目標端庫>.* | kd_test*.person*=kd_test_all.person* | 將源端以 kd_test 開頭的所有庫下以 person 開頭的所有表匯聚至目標端庫 kd_test_all 下,表名保持不變。 | |
*.*=*.<目標端表> | kd_test*.person*=kd_test*.person_all | 將源端以 kd_test 開頭的所有庫下以 person 開頭的所有表匯聚至目標端以 kd_test 開頭的庫下的表 person_all 中,庫名保持不變。 |
通配規則要求如下:
目標端的庫名和表名不允許同時為通配規則。例如,
kd_test*.person*=kd_test*.person*
。如果源端庫和目標端庫均為通配規則,則庫層級的運算式必須完全一樣,表示庫平遷。
如果源端表和目標端表均為通配規則,則表層級的運算式必須完全一樣,表示表平遷。
如果目標端庫為通配規則,則源端庫必須也為通配規則。
如果目標端表為通配規則,則源端表必須也為通配規則。
庫到訊息佇列的通配規則說明
資料轉送支援的資料庫到訊息佇列的通配規則及其要求如下。
下方表格中的星號(*)表示通配規則。
支援的通配規則 | 樣本 | 說明 |
*.*=<Topic 名> | *.*=topic | 將多庫下的多表映射到一個 Topic |
*.<源端表>=<Topic 名> | *.b=topic | 將多庫下的表 b 映射到一個 Topic |
<源端庫>.*=<Topic 名> | a.*=topic | 將庫 a 下的多張表映射到一個 Topic |
<源端庫>.<源端表>=<Topic 名> | a.b=topic | 將庫 a 下的表 b 映射到一個 Topic |
使用限制
資料轉送允許輸入多條規則,但需要注意每條規則不能跨行且前後不允許有空格。
遷移或同步對象規則不允許為空白,排除對象規則允許為空白。
資料轉送不支援在結構遷移、全量遷移期間進行 DDL 變更。
通過匹配規則的方式選擇遷移或同步對象時,資料轉送不支援表名包含特殊字元(包括換行、空格,以及 .|"'`()=;/&\*?[][!])。
資料轉送不支援通過多條匹配規則,將源端同一個庫下的不同表映射至目標端的不同庫下。例如,
a.a* = b.a* & a.b* = c.b*
。存在庫或表匯聚的情境下,不支援反向增量。
說明資料轉送僅在儲存或啟動資料移轉/資料同步任務時,根據已有的庫表是否存在匯聚情境進行判斷。如果在任務運行過程中新出現庫表匯聚的情境,則不會被資料轉送攔截,可能出現反向增量無法正確識別庫表映射關係,導致資料品質問題。
資料轉送暫不支援 CREATE DATBASE 的 DDL 語句。如果建立的庫名在遷移/同步的匹配規則內,您需要手動在目標端建立資料庫才能繼續新增庫的資料同步。
注意事項
當您完成配置遷移/同步對象規則和排除對象規則後,如果源端表名在遷移/同步對象規則和排除對象規則的差集內,則相關對象可以被選擇。
說明差集是指對於給定的兩個集合,返回一個包含所有存在於第一個集合但不存在於第二個集合的元素的新集合。
開啟同步 DDL 功能後,當您使用 DDL 語句在源端建立一張新表或者修改一張表結構時,如果對應的表名在遷移/同步對象規則和排除對象規則的差集內,則該 DDL 語句可以被資料轉送同步至目標端。
庫表匯聚情境下:
建議您使用匹配規則的方式映射源端和目標端的關係。
建議您自行在目標端建立表結構。如果使用資料轉送建立,請在結構遷移步驟跳過部分失敗對象。
如果您在庫或表匯聚的情境下勾選了 DDL 同步,可能存在誤刪風險。例如,源端多個庫或表匯聚至目標端的一個庫或表中。此時,刪除源端的一個庫或表,可能導致目標端的匯聚庫或表被刪除。
您在建立資料移轉任務時,請將 全量遷移 > 目標端對象存在記錄時處理策略 配置為 忽略。
說明選擇 忽略,全量校正將使用 IN 模式拉取資料,無法校正目標端多資料的情境,並且校正效能存在一定程度降級。
如果表存在重新命名映射,則優先重新命名映射。例如,同時存在規則
a.b[0-3]
和a.b[3-5]=a.c
,則表a.b3
重新命名為a.c
。執行 RENAME TABLE 的 DDL 語句時,如果 RENAME 後的表對象不在原匹配規則或排除規則內,可能導致非預期同步問題,請謹慎操作。
配置庫到庫的匹配規則
建立資料移轉或資料同步任務,並配置至 選擇遷移對象 或 選擇同步對象 步驟。
說明選擇遷移對象和選擇同步對象的操作相同,本文以選擇遷移對象為例進行介紹。
資料同步任務中,OceanBase 資料庫 MySQL 租戶至 AnalyticDB MySQL、RDS PostgreSQL 執行個體至 OceanBase 資料庫 Oracle 租戶 和 OceanBase 資料庫 MySQL 租戶之間的資料同步 為庫到庫的匹配規則配置。
在 選擇遷移對象 地區,選中 匹配規則。
在 選擇遷移範圍 地區,輸入 遷移對象規則 和 排除對象規則(可選)。支援的匹配規則詳情請參見 萬用字元規則說明。
說明如果您配置的規則中包含空格,可能導致遷移或同步對象有誤。
單擊 校正。
如果您需要查看匹配結果,請在校正成功後單擊 預覽對象 進行查看。您填寫的通配遷移對象規則和排除對象規則,會同時應用於表和視圖。匹配結果 包括最終對象、新增對象和減少對象。
對象
描述
最終對象
配置的匹配規則最終匹配的遷移對象。
新增對象
最終匹配結果和前一次配置的匹配結果相比,新增的遷移對象。
減少對象
最終匹配結果和前一次配置的匹配結果相比,減少的遷移對象。
通過匹配規則的方式選擇需要遷移或同步的對象後,您可以進行設定過濾條件的操作。
在 匹配結果 > 最終對象 面板,滑鼠移至上方至目標表對象。
單擊顯示的 設定。
在 設定 對話方塊中,輸入標準的 SQL 陳述式中的
WHERE
子句,來配置行過濾。配置完成後,單擊 驗證文法。詳情請參見 SQL 條件過濾資料。語法驗證通過後,單擊 確定。
您還可以在 查看列 地區,查看遷移對象的列資訊。
根據提示完成後續的任務配置。
情境樣本
庫表平遷
將源端 jenkins_api 開頭的所有庫下,以 test 開頭的所有表遷移至目標端,庫名、表名保持不變。匹配規則的配置如下。
庫表重新命名
將源端名為 jenkins_my2dh_one 的庫下,以 test 開頭的所有表遷移至目標端,並且將庫 jenkins_my2dh_one 重新命名為 jenkins_my2dh_one_new,表名保持不變。匹配規則的配置如下。
庫表匯聚
將源端以 jenkins_api 開頭的所有庫下,以 order 開頭的所有表匯聚至目標端庫 jenkins_api_all 下的表 order 中。匹配規則的配置如下。
配置排除對象規則
設定無需同步源端名為 jenkins_api_mysql56 的庫下的歷史表和日誌表,且歷史表以 "history_" 開頭,日誌表以 log 結尾。匹配規則的配置如下。
配置庫到訊息佇列的匹配規則
同步 OceanBase 資料庫的資料至 DataHub、Kafka 和 RocketMQ 時,您可以通過配置匹配規則的方式選擇需要同步的對象。
建立資料同步任務,並配置至 選擇同步對象 步驟。
詳情請參見相應類型的 資料同步 任務文檔。
在 選擇同步對象 地區,選中 匹配規則。
輸入 同步對象規則 和 排除對象規則(可選)。支援的匹配規則詳情請參見 萬用字元規則說明。
三種類型的資料同步任務在進行匹配規則配置時,商務邏輯存在差異。
目標端為 DataHub 時,支援選擇 Topic 類型為 Tuple 或 BLOB。
Tuple 類型僅支援輸入已有的 Topic 名稱,且不支援萬用字元和空格。選中表後,會一對一映射到 Topic 中。
BLOB 類型支援多對一或一對一映射,請注意不支援空格。
如果選擇同步類型時已選擇 結構同步,您可以輸入已有 Topic 的名稱或建立 Topic,僅支援選擇一種映射方式進行 Topic 的建立或選擇。如果選擇同步類型時未勾選 結構同步,則僅支援輸入已有 Topic 的名稱。
目標端為 Kafka 或 RocketMQ 時,支援多對一或一對一映射,請注意不支援空格。
如果選擇同步類型時已勾選 結構同步,您可以輸入已有 Topic 的名稱或建立 Topic。如果選擇同步類型時未勾選 結構同步,則僅支援輸入已有 Topic 的名稱。
單擊 校正。
如果您需要查看匹配結果,請在校正成功後單擊 預覽對象 進行查看。匹配結果 包括最終對象、新增對象和減少對象。
通過匹配規則的方式選擇需要同步的對象後,您可以進行設定過濾條件的操作。
在 匹配結果 > 最終對象 面板,滑鼠移至上方至目標表對象。
單擊顯示的 設定。
在 設定 對話方塊中,您可以進行以下操作。
在 行過濾條件 地區的文字框中,輸入標準的 SQL 陳述式中的
WHERE
子句,來配置行過濾。配置完成後,單擊 驗證文法。詳情請參見 SQL 條件過濾資料。在 分區列 下拉式清單中,選擇目標分區列。您可以選擇多個欄位作為分區列,該參數為可選。
選擇分區列時,如果沒有特殊情況,預設選擇主鍵即可。如果存在主鍵負載不均衡的情況,請選擇唯一性標識且負載相對均衡的欄位作為分區列,避免潛在的效能問題。分區列的主要作用如下:
負載平衡:在目標端可以進行並發寫入的情況下,通過分區列區分發送訊息需要使用的特定線程。
有序性:由於存在並發寫入可能導致的無序問題,資料轉送確保在分區列的值相同的情況下,使用者接收到的訊息是有序的。此處的有序是指變更順序(DML 對於一列的執行順序)。
在 選擇列 地區,選擇需要同步的列。詳情請參見 列過濾。
單擊 確定。
根據提示完成後續的任務配置。
常見問題
許可權不足
請注意源端使用者的使用權限設定問題。如果您授予使用者的許可權不足,部分對象未被資料轉送從前端展示出來,會導致您不能正確配置匹配規則。因此您需要將未授予許可權的對象加入 排除對象規則,以避免資料轉送因無法找到目標端對象而造成資料移轉或資料同步任務中斷。
不支援過濾 DML
在未開啟同步 DDL 的情況下,資料轉送允許使用匹配規則的方式選擇對象。在增量同步處理的過程中,如果建立表滿足匹配規則,相關的 DDL 語句會被忽略,但資料轉送會繼續同步 DML 語句,這樣會造成無法寫入目標端對象而造成資料移轉或資料同步任務中斷,因此您需要在目標端建立表或者將表加入黑名單。