DataWorks支持通过向导模式或脚本模式配置离线同步任务,您可以将分库分表数据同步至目标单表。本文以同步MySQL分库分表数据为例进行说明。
前提条件
已准备好要同步的多个数据源,详情请参见支持的数据源与读写插件。
功能介绍
您可以使用如下几种方式实现分库分表离线同步任务,不同方式间差异对比如下:
|
差异项 |
分库分表数据源+向导模式(推荐) |
||
|
是否支持向导模式 |
是 |
是 |
否 |
|
是否支持按规则配置表名 |
支持正则表达式配置源表名,运行时根据正则搜索匹配表同步。 |
不支持。 |
支持数字范围配置表名,例如: |
|
是否要求表结构一致 |
可以配置“字段缺失策略”,允许部分表缺失字段,作为NULL值往下输出。 |
要求表结构一致。 |
|
|
字段映射参考 |
分库分表数据源中的Meta数据源第一张匹配表。 |
第一个数据源的第一张表。 |
脚本模式手写。 |
|
支持的数据源数量 |
分库分表数据源支持引用最大5000个数据源。 |
建议单节点配置数据源在50个以内。 |
|
|
增加数据源是否需要修改、发布节点 |
无需修改节点,修改数据源后,新运行的实例生效。 |
需要修改任务,增加数据源,配置该数据源的表名。 |
|
|
支持的数据源类型 |
MySQL、PolarDB、PolarDB-O、OceanBase |
MySQL、PolarDB、AnalyticDB、OceanBase |
MySQL、PolarDB、AnalyticDB、SQLServer、Oracle、PostgreSQL、DM、DB2、Oracle、OceanBase |
分库分表数据源+向导模式
进入数据集成页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的,在下拉框中选择对应工作空间后单击进入数据集成。
-
在左侧导航栏单击数据源,然后单击新增数据源,选择数据源类型,当前此方式支持MySQL、PolarDB和PolarDB-O。
-
将每个分库创建为普通数据源。本文以MySQL为例,详细步骤请参见数据源配置。
创建完成后,在数据源列表页面可看到每个分库对应的MySQL数据源,例如数据源名称为MySQL_20241114,对应数据库名
user_info_20241114。 -
创建分库分表数据源,将多个普通数据源合并为一个数据源,作为数据同步的数据来源。
-
单击新增数据源,选择分库分表。在新增数据源对话框中,单击分库分表分类标签,可选的数据源类型包括MySQL(分库分表)、PolarDB-O(分库分表)和PolarDB(分库分表)。
-
按需选择分库分表数据源类型,配置相关参数。本文以MySQL(分库分表)为例。
在数据源名称中输入名称(如
Database_and_Table_Sharding_of_MySQL),配置完成后单击完成创建分库分表数据源。关键参数说明:
-
自定义数据源名称。
-
选择数据源:选择已创建的各分库普通数据源。
-
Meta数据源:分库分表同步,所有数据源内的库表结构必须保持一致,请选择其中一个数据源作为默认元数据的模板,供配置同步任务时拉取默认库表结构使用。
重要数据源内的库表结构不一致时,后续同步任务将会执行报错。
-
-
-
配置分库分表同步任务。
向导模式配置分库分表:数据来源选择MySQL(分库分表),然后选择已创建的分库分表数据源。完整的任务配置步骤请参见向导模式配置。
说明本文以MySQL(分库分表)为例,实际配置时请按需选择。
网络连通性测试页面显示数据来源数据源名称为 Database_and_Table_Sharding_of_MySQL,资源组为 Serveless_Resource(华东2-上海,按量付费,占用0.5 CU),数据去向选择 MaxCompute(ODPS) 类型、数据源名称为 doc_test_project,三者网络连通性测试均显示可连通。
-
单击下一步。
-
选择需要同步的表,保存并发布,完成后续步骤。
在配置数据来源与去向页面的步骤2配置任务中,左侧数据来源区域选择数据源为MySQL(分库分表),选表方式为固定选表,表选择user_info,切分键填写id(分库分表要求所有表的结构必须保持一致,否则执行报错)。右侧数据去向区域选择数据源为MaxCompute(ODPS),表名为user_info,分区信息填写
pt=${bizdate},写入模式选择写入前清理已有数据(Insert Overwrite),空字符串转为Null写入选择否。
普通数据源+向导模式
-
将每个分库创建为普通数据源。本文以MySQL为例,详细步骤请参见数据源配置。
-
配置分库分表同步任务。
向导模式配置分库分表:在数据来源区域单击+编辑数据来源,在弹出的数据源选择面板中勾选并添加多个分库对应的数据源。完整的任务配置步骤请参见向导模式配置。
-
将多个普通数据源加入到已选中数据源中,单击确定。
-
单击下一步。
-
选择每个数据源中需要同步的表,保存并发布,完成后续步骤。
重要此配置中,分库分表数据源使用相同账号密码选项会默认勾选,表示所有分库分表数据源将使用第一个数据源中配置的账户和密码去访问数据库。如果您的分库分表数据库使用的账号密码不同,请取消勾选,使用各自数据源配置中的账户和密码去访问数据库。
在配置数据来源与去向页面,左侧数据来源区域配置了三个MySQL分库分表数据源(如MySQL_20241112、MySQL_20241114、MySQL_20241113),每个数据源均选择user_info表。页面显示警告"分库分表要求:所有表的schema必须保持一致,否则执行报错"。右侧数据去向区域选择MaxCompute(ODPS)数据源,表为user_info,分区信息设置为
pt=${bizdate},写入模式为写入前清理已有数据 (Insert Overwrite)。
脚本模式
-
配置分库分表同步任务。
脚本模式配置分库分表:脚本示例如下,完整的任务配置步骤请参见脚本模式配置。
重要实际运行时,请删除下述代码中的注释。
{ "type":"job", "version":"2.0", "steps":[ { "stepType":"mysql", "parameter":{ "envType":0, "column":[ "id", "name" ], "socketTimeout":3600000, "tableComment":"", "connection":[ //根据分库数配置connection { "datasource":"datasourceName1", //分库分表的数据源1 "table":[ //分库分表的Table列表1 "tb1" ] }, { "datasource":"datasourceName2", //分库分表的数据源2 "table":[ //分库分表的Table列表2 "tb2", "tb3" ] } ], "useSpecialSecret":true,//各个数据源使用各自的密码 "where":"", "splitPk":"id", "encoding":"UTF-8" }, "name":"Reader", "category":"reader" }, { "stepType":"odps", "parameter":{ "partition":"pt=${bizdate}", "truncate":true, "datasource":"odpsname", "envType":0, "isSupportThreeModel":false, "column":[ "id", "name" ], "emptyAsNull":false, "tableComment":"", "table":"t1", "consistencyCommit":false }, "name":"Writer", "category":"writer" } ], "setting":{ "executeMode":null, "errorLimit":{ "record":"" }, "speed":{ "concurrent":2, "throttle":false } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }