本文为您介绍如何通过DataWorks数据集成将MySQL全增量数据一体化同步至MaxCompute表中。
前提条件
已完成MaxCompute和MySql数据源配置。您需要将数据库添加至DataWorks上,以便在同步任务配置时,可通过选择数据源名称来控制同步读取和写入的数据库。本实践中创建的数据源名为
doc_mysql1
,详情请参见配置MySQL数据源、配置MaxCompute数据源。说明数据源相关能力介绍详情请参见:数据源概述。
已购买合适规格的独享数据集成资源组。详情请参见:新增和使用独享数据集成资源组。
已完成独享数据集成资源组与数据源的网络连通。详情请参见:网络连通方案。
已完成数据源环境准备。
需求分析
数据:将MySQL全量数据一次性同步至MaxCompute,增量数据实时同步MaxCompute Log表,全增量数据定时Merge。
表:将源端所有
doc_
前缀的表名,在写入目标端时统一更新为ods_
前缀。字段:目标表在原有表结构基础上,增加
execute_time
字段用于记录源端表某个记录发生变更的时间。
综合如上分析结果,最终的表对应关系如下所示:
源端数据库 | 源端待同步表 | 写入的目标表 | 目标表新增字段 |
doc_demo1 | doc_tb1 | ods_tb1 | execute_time |
doc_tb2_nopk | ods_tb2_nopk |
操作流程
创建同步任务
选择同步方案。
创建同步解决方案任务,选择需要同步的源端数据源MySQL,目标端数据源MaxCompute,并选择一键实时同步至MaxCompute方案。
配置网络连通。
源端选择已创建的数据源
doc_mysql1
,目标数据源为DataWorks工作空间创建的MaxCompute数据源,并测试连通性。设置同步来源与规则。
在基本配置区域,配置同步解决方案的名称、任务存放位置等信息。
在数据来源区域,确认需要同步的源端数据源相关信息。
在选择同步的源表区域,选中需要同步的源表,单击图标,将其移动至已选源表。
本案例中选择
doc_demo1
下的表doc_tb1
、doc_tb2_nopk
。在设置表(库)名的映射规则区域,单击添加规则,选择相应的规则进行添加。
同步时默认将源端数据表写入目标端同名表中,您可以通过添加映射规则定义最终写入目的端的表名称。本案例通过源表名和目标表名转换规则,将源端
doc_
前缀的表在写入目标端时替换为ods_
前缀。
设置目标表。
设置写入模式。
目前支持将增量数据实时写入MaxCompute的Log表,Log表中的增量数据再定期与目标端Base表全量数据进行合并(Merge),最终将结果写入Base表中。
时间自动分区设置。
您可以在时间自动分区设置配置该任务写入MaxCompute分区表或是非分区表,并定义分区字段的名称,本案例中选择写入分区表,分区字段为
ds
。说明若选择写入分区表,可单击图标定义目标表分区字段名称。
刷新源表与目标表映射。
单击刷新源表和MaxCompute表映射将根据您在步骤三配置的目标文件映射规则来生成目标表,若步骤三未配置映射规则,将默认写入与源表同名的目标表,若目标端不存在该同名表,将默认新建。同时,您可以修改表建立方式、为目标表在源有表字段基础上增加附加字段。
说明目标表名将根据您在设置表(库)名的映射规则阶段配置的表名转换规则自动转换。
功能
描述
为非主键表选择主键
由于当前方案不支持无主键表同步,所以您需要单击同步主键列的按钮,为无主键表设置自选主键,即选择表中一个或部分字段作为主键,写入目标端时将会使用该主键进行去重。
本案例为无主键表
doc_tb2_nopk
选择id
列承担主键作用。选择表建立方式
支持自动建表和使用已有表。
当表建立方式选择使用已有表时,MaxComputeBase 表名列显示自动创建的表名称。您也可以在下拉列表中选择需要使用的表名称。
当表建立方式选择自动建表时,显示自动创建的表名称。您可以单击表名称,查看和修改建表语句。
本案例选择自动建表。
是否全量同步
您可以在全量同步列选择是否需要在实时同步前先将全量数据同步至目标端。
如果关闭全量同步,则对应的表将不进行离线全量同步。适用于已经通过其他方式将全量数据同步至目标端的场景。
本案例开启所有表的全量同步。
为目标字段添加附加字段
单击操作列的编辑附加字段,可以为目标表在源端字段的基础上增加字段并为字段赋值。支持手动赋值常量与变量。
说明仅在表建立方式为自动建表时,可以使用此功能。
本案例新增字段
execute_time
并为字段赋值变量_execute_time_
,用于记录操作的执行时间。目标表、字段及数据读取写入关系确认无误后,单击下一步。
表粒度同步规则设置。
对目标表进行单独配置DML和批量配置DML规则,配置项有插入(INSERT)、更新(UPDATE)和删除(DELETE)。可配置的策略如下:
正常处理:此DML消息将会继续下发给目标数据源,由目标数据源来处理。
忽略:丢弃掉此DML消息,不再向目标数据源发送此消息,对应数据不会改变。
有条件的正常处理:按过滤表达式进行条件过滤,满足过滤条件的数据会被正常处理,不满足的会被忽略掉。
如不设置,则默认为正常处理。
说明修改DML为非正常处理时,将导致源端和目标端数据不一致。
DDL消息处理策略。
来源数据源会包含许多DDL操作,数据集成体提供默认处理策略,您也可以根据业务需求,对不同的DDL消息设置同步至目标端的处理策略。不同DDL消息处理策略请参见:DDL消息处理规则。
本方案使用默认处理规则。
设置任务运行资源。
当前方案创建后将分别生成全量数据离线同步子任务和增量数据实时同步子任务。您需要在运行资源设置界面配置离线同步任务和实时同步任务的相关属性。
包括实时增量同步及离线全量同步使用的独享数据集成资源组、离线全量同步使用的调度资源组,同时,单击高级配置可配置是否容忍脏数据、任务最大并发数、源库允许支持的最大连接数等参数。
说明DataWorks的离线同步任务通过调度资源组将其下发到数据集成任务执行资源组上执行,所以离线同步任务除了涉及数据集成任务执行资源组外,还会占用调度资源组资源。如果使用了独享调度资源组,将会产生调度实例费用。您可通过任务下发机制对该机制进行了解。
离线和实时同步任务推荐使用不同的资源组,以便任务分开执行。如果选择同一个资源组,任务混跑会带来资源抢占、运行态互相影响等问题。例如,CPU、内存、网络等互相影响,可能会导致离线任务变慢或实时任务延迟等问题,甚至在资源不足的极端情况下,可能会出现任务被OOM KILLER杀掉等问题。
执行同步任务
提交并发布任务。
单击左上角的后,选择
进入运维中心页面。在运维中心的左边菜单内单击进入
页面,对已发布的实时任务在操作栏里单击提交即可。
您可重点关注以下步骤中创建的表及节点任务名称以便进行后续运维。例如,创建MaxCompute Log表、创建MaxCompute Base表、创建数据集成实时同步任务、提交发布增全量Merge Into节点。
同步任务运维
同步至MaxCompute全增量Merge分为3个阶段:
任务配置当天,执行全量数据初始化的离线同步任务。
任务配置当天,待全量数据初始化完成后,启动实时同步任务,将增量数据实时同步至MaxCompute Log表。
任务配置第二天,Merge任务将Base表全量数据与实时同步任务的增量数据进行Merge,最后将结果写入Base表。目前Merge周期为1天。
为避免上述阶段出现异常导致数据未产出,我们需要分别为实时同步子任务及Merge节点进行监控。
附:查询数据
由于目前全增量Merge周期为一天,所以任务配置当天,我们只能在目标表查询到同步的全量数据,待第二天后,可查询到全增量Merge后的数据。
查看全量数据写入情况
在数据开发界面找到ODPS SQL节点,通过命令查询表数据,查询数据前请先在数据集成>任务运维界面确认执行步骤中,启动全量数据初始化同步任务运行步骤已执行成功。创建ODPS SQL临时查询节点,详情请参见创建临时查询。