本文為您介紹如何通過DataWorks數據集成和Flink兩種方式將MySQL分庫分表的數據寫入至Hologres同一個表中,通過本實踐您可以根據業務場景選擇合適的方式將MySQL分庫分表數據寫入Hologres。
背景信息
實際業務場景下數據同步通常不能通過一個或多個簡單離線同步或者實時同步任務完成,而是由多個離線同步、實時同步和數據處理等任務組合完成,這就會導致數據同步場景下的配置復雜度非常高。尤其是在MySQL分庫分表的場景下,上游的數據庫和表非常多,都需要同時寫入一張Hologres表,如果要同時配置多個任務則會導致配置非常復雜且運維困難。
針對以上痛點,阿里云DataWorks數據集成中同步任務提供了面向業務場景的配置化方案,支持不同數據源的一鍵同步功能,方便業務簡單快速的進行數據同步。同時阿里云Flink也提供了豐富強大的數據實時入倉入湖能力,支持將多種數據源方便快捷的寫入至Hologres。
前提條件
開通Hologres,詳情請參見購買Hologres。
創建RDS MySQL實例,詳情請參見快速創建RDS MySQL實例。
如果選擇使用DataWorks同步,請開通DataWorks,詳情請參見開通DataWorks服務;同時購買DataWorks獨享數據集成資源組,并完成資源配置,詳情請參見新增和使用獨享數據集成資源組。
如果選擇使用Flink同步,請開通Flink,詳情請參見開通實時計算Flink版。
開通的云服務請確保在同一個地域內。
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任務
創建一鍵實時同步任務
前往DataWorks數據集成左側選擇同步任務,創建同步任務。詳情請參見選擇同步解決方案。數據來源選擇為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的具體操作請參見數據庫實時入倉快速入門。