本文为您介绍如何通过DataWorker数据集成和Flink两种方式将MySQL分库分表的数据写入至Hologres同一个表中,通过本实践您可以根据业务场景选择合适的方式将MySQL分库分表数据写入Hologres。
背景信息
实际业务场景下数据同步通常不能通过一个或多个简单离线同步或者实时同步任务完成,而是由多个离线同步、实时同步和数据处理等任务组合完成,这就会导致数据同步场景下的配置复杂度非常高。尤其是在MySQL分库分表的场景下,上游的数据库和表非常多,都需要同时写入一张Hologres表,如果要同时配置多个任务则会导致配置非常复杂且运维困难。
针对以上痛点,阿里云DataWorks数据集成一键同步解决方案提供了面向业务场景的同步任务配置化方案,支持不同数据源的一键同步功能,方便业务简单快速的进行数据同步。同时阿里云Flink也提供了丰富强大的数据实时入仓入湖能力,支持将多种数据源方便快捷的写入至Hologres。
MySQL分库分表通过DataWorks同步至Hologres
Hologres与DataWorks深度集成,支持一键同步解决方案将多种数据源数据同步至Hologres中,将MySQL分库分表数据通过一键同步解决方案同步至Hologres步骤如下。
- 准备MySQL数据
在同步之前需要准备好MySQL分库分表数据。本示例准备了两个库和三张表分别如下。
数据库名称 |
表名称 |
数据量 |
hmtest1 |
product_20220420 |
6301 |
hmtest1 |
product_20220421 |
6331 |
hmtest2 |
product_20220422 |
6227 |
表的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数据集成创建一键实时同步至Hologres任务,详情请参见选择同步解决方案。数据来源选择为MySQL,数据去向选择为Hologres。

- 单击下一步。
- 配置同步网络链接
- 分别选择数据来源和数据去向的数据源名称后并单击测试连通性。

- 数据来源和数据去向都为可连通状态后,单击下一步。
- 设置同步来源和规则
- 配置方案名称以及来源的基本信息,包括时区以及来源表。

- 设置表(库)名的映射规则。如下示例通过正则匹配法选择出上游的库和表,实现分库分表写入同一个目标表。

- 单击下一步。
- 设置目标表
- 单击刷新源表和Hologres表映射。
说明 映射关系里会展示每一个上游表与目标表的关系,只要目标表为同一个表即表示都映射至同一个目标表。
- 添加附加字段
为了更好的区分上游表的来源,需要为目标表添加附加字段。
- 勾选所有的任务,并单击批量编辑目标表附加字段。
- 在批量编辑目标表附加字段弹窗,单击新增字段,分别新增db_name和table_name两个字段。
- 新增字段后单击
为目标表添加附加字段。
本示例选择DB_NAME_SRC表示来源数据库名称;TABLE_NAME_SRC表示来源数据表名称。
- (可选)将附加字段设置为主键(PK)
若是上游数据量比较大,且表比较多,建议将附加字段设置成PK,与源表主键做联合主键,防止多源表主键数据互相冲突,同时将附加字段设置为Distribution Key,能保证将相同的数据写入至同一个Shard,实现更好的性能。
- 单击表名称,进入建表语句弹窗。
- 修改建表语句,附加列table_name添加为PK和Distribution Key。
说明
- 建议添加tablename为联合主键,可根据业务场景适当添加。
- 也可以根据业务需求为表设置更多的索引,以实现更好的性能,详情请参见CREATE TABLE。

BEGIN;
CREATE SCHEMA IF NOT EXISTS "holotest";
CREATE TABLE IF NOT EXISTS "holotest"."product" (
"value_id" int8,
"attribute_id" int8,
"id_card" int8,
"name" text,
"potion" text,
"ds" text,
"db_name" text,
"table_name" text,
PRIMARY KEY ("value_id","table_name")
);
call set_table_property('holotest_product','distribution','table_name');
comment on table "hmtest1"."product" is 'Please write your comments';
COMMIT;
- 单击下一步。
- 设置DML策略
目标表设置完成之后,为任务配置DML策略。根据业务情况进行单表设置或者批量设置。
- 勾选所有的任务,并单击批量设置DML规则。
- 在DML规则配置弹窗,选择处理策略为正常处理。

- 单击确认完成DML规格配置。
- 单击下一步。
- 实时同步DDL消息处理策略
- 根据业务情况为任务设置DDL消息处理策略。本示例DDL消息处理策略设置如下所示。

- 单击下一步。
- 运行资源设置
- 根据业务情况进行运行资源设置,包括资源组、连接数,并发数等。

- 单击完成配置。
- 运行任务
配置完成之后,提交任务执行,单击
执行详情可以查看任务运行详情。

- 查询数据
一键解决方案会先运行全量数据,再运行实时同步数据。当全量离线任务运行完成后,可以前往Hologres中查询数据。

如上示例可以看到附加列有对应的数据表示数据的来源库和表名,说明上游分库分表已经写入至Hologres的同一个表中。
业务上游有实时数据也会启动实时任务,如上游增加数据下游将会自动触发实时任务写入至Hologres中。本示例仅展示如何通过一键同步解决方案实现MySQL分库分表写入至Hologres一张表中,实现更多功能请根据业务逻辑自行配置任务。
MySQL分库分表通过Flink同步至Hologres
通过Flink将MySQL分库分表的数据同步至Hologres的具体操作请参见数据实时入仓入湖快速入门。