本文介绍如何使用数据管理DMS任务编排的单实例SQL节点,将源表中6个月前的数据(历史数据)迁移(归档)至目标表中,并删除源表中已迁移的数据。
前提条件
已将目标实例录入DMS中。录入实例操作,请参见云数据库录入。
实例状态正常。您可在DMS控制台首页的数据库实例区域,单击实例名称,查看实例状态。
支持的数据库类型如下:
使用限制
若实例的管控模式为自由操作或稳定变更时,需保证您为该任务流的责任人,否则在编辑任务流的节点后,可能会导致任务流运行失败。若实例的管控模式为安全协同,则不存在该考虑。设置任务流责任人的操作,请参见任务编排概述。
准备工作
本示例已提前创建test
表,建表语句如下:
-- 创建表
CREATE TABLE test (
`id` bigint(20) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`gmt_create` DATETIME NOT NULL COMMENT '创建时间',
`gmt_modified` DATETIME NOT NULL COMMENT '修改时间',
`content` TEXT COMMENT '测试数据'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务编排测试表';
-- 插入数据
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-01-01 01:00:00', '2020-01-01 01:00:00', 'value1');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-02-01 01:00:00', '2020-02-01 01:00:00', 'value2');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-03-01 01:00:00', '2020-03-01 01:00:00', 'value3');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-04-01 01:00:00', '2020-04-01 01:00:00', 'value4');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-05-01 01:00:00', '2020-05-01 01:00:00', 'value5');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-06-01 01:00:00', '2020-06-01 01:00:00', 'value6');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-07-01 01:00:00', '2020-07-01 01:00:00', 'value7');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-08-01 01:00:00', '2020-08-01 01:00:00', 'value8');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-09-01 01:00:00', '2020-09-01 01:00:00', 'value9');
INSERT INTO test( `gmt_create`, `gmt_modified`, `content`) VALUES ('2020-10-01 01:00:00', '2020-10-01 01:00:00', 'value10');
操作步骤
步骤一:新增任务流
- 登录数据管理DMS 5.0。
单击控制台左上角的图标,选择
。说明若您使用的是非极简模式的控制台,在顶部菜单栏中,选择
。单击新增任务流。
在新建任务流对话框设置任务流名称和描述后,单击确认。
步骤二:配置任务流变量
任务流变量为时间变量,可在所有节点中使用,使用格式为${变量名}
。在本文示例场景中,需要周期性地迁移test表中6个月前的数据,则需要配置时间变量作为筛选条件在SQL语句中使用。
本示例以yearmonth6_name
和yearmonth6_date
举例。
单击页面下方的变量配置页签,在左侧导航栏中单击任务流变量,配置如下变量:
新增
yearmonth6_name
变量,格式为yyyy-MM
,偏移为- 6月
。表示当前日期向前偏移6个月(精确至月份),例如当前日期为2023-06-27,该变量的值即为2022-12。
新增
yearmonth6_date
变量,格式为yyyy-MM-01
,偏移为- 6月
。表示当前日期向前偏移6个月,对应该月份的第一天(精确至日期),例如当前日期为2023-06-27,该变量的值即为2022-12-01。
关于变量的规则与作用详情,请参见变量概述。
步骤三:创建并配置节点
创建迁移数据节点
在任务编排页面的左侧任务类型中,拖曳单实例SQL节点至页面中的空白区域。
右键单击目标任务节点,选择重命名,将节点名称重命名为迁移数据节点。
双击目标节点,进入编写SQL页面。
在数据库搜索框中搜索目标数据库,并在下方编写SQL区域输入以下SQL语句。
CREATE TABLE IF NOT EXISTS `test_${yearmonth6_name}` LIKE test; INSERT INTO `test_${yearmonth6_name}` SELECT * FROM `test` WHERE gmt_create < '${yearmonth6_date}';
示例SQL含义:在当前数据库下,创建历史数据的归档表test_${yearmonth6_name},并将符合日期要求的历史数据从test表迁移至该表中。
单击预览,检验SQL的正确性。
创建清除历史数据节点
在任务编排页面的左侧任务类型中,拖曳单实例SQL节点至页面中的空白区域。
单击目标任务节点,选择重命名,将节点名称重命名为清除历史数据节点。
双击目标节点,进入编写SQL页面。
在数据库搜索框中搜索目标数据库,并在下方编写SQL区域输入以下SQL语句。
警告建议您在业务低峰期使用单实例SQL节点执行DELETE语句删除大量数据,以免长时间锁表导致业务受损。
DELETE FROM `test` WHERE gmt_create < '${yearmonth6_date}';
示例SQL含义:删除test表中已迁移的数据。
单击预览,检验SQL的正确性。
步骤四:连接节点并配置调度信息
在任务流中的画布中,单击迁移数据节点上的圆点并拉出连接线,连接至清除历史数据节点。
说明通过连接线设置任务执行的先后顺序。本示例中,先执行迁移数据节点,再执行清除历史数据节点。
单击任务流中画布下方的任务流信息页签,在调度配置区域配置如下信息:
参数
示例值
开启调度
打开开启调度开关。
调度类型
选择定时调度/周期调度。
生效时间
调度周期生效的区间,此处选择默认区间1970-01-01~9999-01-01,表示一直生效。
调度周期
选择按月。
指定时间
选择每月1号。
具体时间
调整为01:00。
cron表达式
不需要手动配置,系统会根据您配置的周期、具体时间自动生成。
说明本示例的调度配置为每月1号凌晨01:00运行,您可以按需配置调度计划。更多信息,请参见任务编排概述。
步骤五:运行任务流并验证
单击页面上方的试运行。
如果执行日志的最后一行出现
status SUCCEEDED
,表明任务试运行成功。如果执行日志的最后一行出现
status FAILED
,表明任务试运行失败。说明如果试运行失败,请在执行日志中查看执行失败的节点和原因,修改配置后重新尝试。
前往SQL窗口验证test表中的历史数据是否已迁移至目标表,及test表中已迁移的数据是否已被删除。具体操作,请参见使用SQL语句查询数据。