本文為您介紹如何通過DataWorksData Integration和Flink兩種方式將MySQL分庫分表的資料寫入至Hologres同一個表中,通過本實踐您可以根據業務情境選擇合適的方式將MySQL分庫分表資料寫入Hologres。
背景資訊
實際業務情境下資料同步通常不能通過一個或多個簡單離線同步或者即時同步任務完成,而是由多個離線同步、即時同步和資料處理等工作群組合完成,這就會導致資料同步情境下的配置複雜度非常高。尤其是在MySQL分庫分表的情境下,上遊的資料庫和表非常多,都需要同時寫入一張Hologres表,如果要同時配置多個任務則會導致配置非常複雜且營運困難。
針對以上痛點,阿里雲DataWorksData Integration中同步任務提供了面向業務情境的配置化方案,支援不同資料來源的一鍵同步功能,方便業務簡單快速的進行資料同步。同時阿里雲Flink也提供了豐富強大的資料即時入倉入湖能力,支援將多種資料來源方便快捷的寫入至Hologres。
前提條件
-
開通Hologres,詳情請參見購買Hologres執行個體。
-
建立RDS MySQL執行個體,詳情請參見(廢棄,重新導向到“第一步”)快速建立RDS MySQL執行個體。
-
如果選擇使用DataWorks同步,請開通DataWorks,詳情請參見開通DataWorks服務;同時購買DataWorks獨享Data Integration資源群組,並完成資源配置,詳情請參見使用獨享Data Integration資源群組。
-
如果選擇使用Flink同步,請開通Flink,詳情請參見開通Realtime ComputeFlink版。
開通的雲端服務請確保在同一個地區內。
MySQL分庫分表通過DataWorks同步至Hologres
Hologres與DataWorks深度整合,支援一鍵同步解決方案將多種資料來源資料同步至Hologres中,將MySQL分庫分表資料通過一鍵同步解決方案同步至Hologres步驟如下。
-
準備MySQL資料
在同步之前需要準備好MySQL分庫分表資料。本樣本準備了兩個庫和三張表分別如下。
資料庫名稱
表名稱
hmtest1
product_20220420
hmtest1
product_20220421
hmtest2
product_20220422
表的DDL定義如下,三個表的Schema一致,但不同的表中會有部分資料重複。
CREATE TABLE product_20220420 ( value_id int8, attribute_id int8 not null, id_card int8, name text, potion text, ds text, PRIMARY KEY (`value_id`) ); -
配置一鍵即時同步至Hologres任務
-
建立一鍵即時同步任務
-
前往DataWorksData Integration左側選擇同步任務,建立同步任務。詳情請參見選擇同步解決方案。資料來源選擇為MySQL,資料去向選擇為Hologres。

-
單擊建立同步任務。
-
-
配置同步網路連結
-
配置新任務名稱。
-
同步類型選擇整庫即時。
-
分別選擇資源群組,資料來源和資料去向的資料來源名稱後並單擊測試所有連通性。
首次選擇需要建立資源群組和資料來源。

-
當資料來源和資料去向都為網路連通狀態後,確定後單擊下一步。

-
-
設定同步來源和規則
-
配置方案名稱以及來源的基本資料,包括時區以及來源表。

-
設定表名映射規則。
-
若您已在Hologres資料庫建立映射表,請在需要同步的源表中所在目標表名列選擇對應表名,目標Schema名列選擇對應Schema。

-
若您還未在Hologres資料庫中建立映射表。可通過目標表名映射自訂來定義新的映射表,系統將為您自動建立並完成映射。
-
單擊目標表名映射自訂右邊編輯。
-
在設計表名映射規則中單擊新增。
-
在編輯規則中自訂規則名稱,選擇源端表名,單擊操作,並在源中填寫源表名,目標中填寫建立表名。

-
單擊確認應用後,在對應源錶行,選擇所定義的規則,並重新整理映射。在目標Schema名列選擇對應Schema。

-
-
-
-
設定目標表
-
單擊重新整理源表和Hologres表映射。
說明映射關係裡會展示每一個上遊表與目標表的關係,只要目標表為同一個表即表示都映射至同一個目標表。
-
添加附加欄位
為了更好的區分上遊表的來源,需要為目標表添加附加欄位。
-
勾選所有的任務,並單擊批量修改,選擇目標表結構-批量修改和新增欄位。
-
在目標表結構-批量修改和新增欄位彈窗,單擊添加字段,分別新增db_name和table_name兩個欄位。
-
新增欄位後單擊應用並重新整理映射。

本樣本選擇DB_NAME_SRC表示來來源資料庫名稱;TABLE_NAME_SRC表示來來源資料表名稱。
-
(可選)將附加欄位設定為主鍵(PK)
若是上遊資料量比較大,且表比較多,建議將附加欄位設定成PK,與源表主鍵做聯合主鍵,防止多源表主鍵資料互相衝突,同時將附加欄位設定為Distribution Key,能保證將相同的資料寫入至同一個Shard,實現更好的效能。
-
單擊目標表名右邊
,再進入SQL建表語句預覽彈窗。
-
修改建表語句,附加列table_name添加為PK和Distribution Key。
說明-
建議添加源表表名tablename為聯合主鍵,可根據業務情境適當添加。
-
也可以根據業務需求為表設定更多的索引,以實現更好的效能,詳情請參見CREATE TABLE。

BEGIN; CREATE TABLE IF NOT EXISTS hologres1.product1 ( value_id BIGINT NOT NULL, attribute_id BIGINT NOT NULL, id_card BIGINT, "name" TEXT, potion TEXT, ds TEXT, table_name TEXT NOT NULL, db_name TEXT, PRIMARY KEY(value_id,table_name) ); CALL SET_TABLE_PROPERTY('hologres1.product1', 'distribution_key', '"table_name","value_id"'); CALL SET_TABLE_PROPERTY('hologres1.product1', 'time_to_live_in_seconds', '3153600000'); CALL SET_TABLE_PROPERTY('hologres1.product1', 'orientation', 'column'); CALL SET_TABLE_PROPERTY('hologres1.product1', 'binlog.level', 'none'); CALL SET_TABLE_PROPERTY('hologres1.product1', 'bitmap_columns', '"name","potion","ds"'); CALL SET_TABLE_PROPERTY('hologres1.product1', 'dictionary_encoding_columns', '"name":auto,"potion":auto,"ds":auto,"table_name":auto,"db_name":auto'); COMMIT; -
-
-
單擊應用並重新整理映射,如圖所示。

-
-
-
設定DML策略
目標表設定完成之後,為任務配置DML策略。根據業務情況進行單表設定或者大量設定。
-
勾選所有的任務,並單擊批量修改,選擇DML規則配置。
-
在DML規則配置彈窗,選擇處理策略為正常處理。

-
單擊確定完成DML規格配置。
-
-
DDL能力配置
-
根據業務情況為任務進行DDL能力配置。本樣本DDL訊息處理原則設定如下所示。

-
單擊確定。
-
-
進階參數配置
-
根據業務情況進行進階參數配置,包括讀端配置,寫端配置和運行時配置。

-
單擊確定。
-
-
完成後,單擊完成配置。
-
-
運行任務
配置完成之後,在對應任務中操作列單擊啟動,在更多-查看可以查看任務運行詳情。

-
查詢資料
一鍵解決方案會先運行全量資料,再運行即時同步資料。當全量離線任務運行完成後,可以前往Hologres中查詢資料。

如上樣本可以看到附加列有對應的資料表示資料的來源庫和表名,說明上遊分庫分表已經寫入至Hologres的同一個表中。
業務上遊有即時資料也會啟動即時任務,如上遊增加資料下遊將會自動觸發即時任務寫入至Hologres中。本樣本僅展示如何通過一鍵同步解決方案實現MySQL分庫分表寫入至Hologres一張表中,實現更多功能請根據商務邏輯自行配置任務。
MySQL分庫分表通過Flink同步至Hologres
通過Flink將MySQL分庫分表的資料同步至Hologres的具體操作請參見資料庫即時入倉快速入門。