DataWorks支持通过向导模式或脚本模式配置离线同步任务,您可以将分库分表数据同步至目标单表。本文以同步MySQL分库分表数据为例进行说明。
前提条件
已准备好要同步的多个数据源,详情请参见支持的数据源与读写插件。
背景信息
您可以使用如下几种方式实现分库分表离线同步任务,不同方式间差异对比如下:
差异项 | 分库分表数据源+向导模式(推荐) | ||
是否支持向导模式 | 是 | 是 | 否 |
是否支持按规则配置表名 | 支持正则表达式配置源表名,运行时根据正则搜索匹配表同步。 | 不支持。 | 支持数字范围配置表名,例如: |
是否要求表结构一致 | 可以配置“字段缺失策略”,允许部分表缺失字段,作为NULL值往下输出。 | 要求表结构一致。 | |
字段映射参考 | 分库分表数据源中的Meta数据源第一张匹配表。 | 第一个数据源的第一张表。 | 脚本模式手写。 |
支持的数据源数量 | 分库分表数据源支持引用最大5000个数据源。 | 建议单节点配置数据源在50个以内。 | |
增加数据源是否需要修改、发布节点 | 无需修改节点,修改数据源后,新运行的实例生效。 | 需要修改任务,增加数据源,配置该数据源的表名。 | |
支持的数据源类型 | MySQL、PolarDB | MySQL、PolarDB、AnalyticDB | MySQL、PolarDB、AnalyticDB、SQLServer、Oracle、PostgreSQL、DM、DB2、Oracle |
分库分表数据源+向导模式
进入数据集成页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的 ,在下拉框中选择对应工作空间后单击进入数据集成。
在左侧导航栏单击数据源,然后单击新增数据源,选择数据源类型,当前此方式支持MySQL和PolarDB。
将每个分库创建为普通数据源。本文以MySQL为例,详细步骤请参见创建数据集成数据源。
创建分库分表数据源,将多个普通数据源合并为一个数据源,作为数据同步的数据来源。
单击新增数据源,选择分库分表。
按需选择分库分表数据源类型,配置相关参数。本文以MySQL(分库分表)为例。
关键参数说明:
自定义数据源名称。
选择数据源:选择已创建的各分库普通数据源。
Meta数据源:分库分表同步,所有数据源内的库表结构必须保持一致,请选择其中一个数据源作为默认元数据的模板,供配置同步任务时拉取默认库表结构使用。
重要数据源内的库表结构不一致时,后续同步任务将会执行报错。
配置分库分表同步任务。
向导模式配置分库分表:数据来源选择MySQL(分库分表),然后选择已创建的分库分表数据源。完整的任务配置步骤请参见通过向导模式配置离线同步任务。
说明本文以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" } ] } }