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(分库分表)为例。

关键参数说明:
-
自定义数据源名称。
-
选择数据源:选择已创建的各分库普通数据源。
-
Meta数据源:分库分表同步,所有数据源内的库表结构必须保持一致,请选择其中一个数据源作为默认元数据的模板,供配置同步任务时拉取默认库表结构使用。
重要数据源内的库表结构不一致时,后续同步任务将会执行报错。
-
-
-
配置分库分表同步任务。
向导模式配置分库分表:数据来源选择MySQL(分库分表),然后选择已创建的分库分表数据源。完整的任务配置步骤请参见向导模式配置。
说明本文以MySQL(分库分表)为例,实际配置时请按需选择。

-
单击下一步。
-
选择需要同步的表,保存并发布,完成后续步骤。

普通数据源+向导模式
脚本模式
-
配置分库分表同步任务。
脚本模式配置分库分表:脚本示例如下,完整的任务配置步骤请参见脚本模式配置。
重要实际运行时,请删除下述代码中的注释。
{ "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" } ] } }


