本文介绍如何使用数据管理DMS任务编排(老)高效地实现事件调度。

背景信息

说明 任务编排(老)功能已下线。详细信息,请参见 【通知】下线任务编排(老)和数仓开发(老)功能
传统的数据库事件调度(如MySQL的事件调度器Event Scheduler)虽然功能强大,但在使用过程中仍发现一些不足:
  • 门槛高:用户需要掌握事件定义的特殊SQL语法(CREATE EVENTALTER EVENT),无法通过简单的界面完成配置。
  • 强依赖数据库内核:内核需要支持并开启事件调度器。
  • 受限单个数据库:只能针对单个数据库进行调度,无法与其他数据库或工具进行联动。
  • 难追踪:无法查看调度事件的执行状态、执行历史、运行时长等信息。
  • 难运维:无法对事件执行暂停、重跑等操作,事件执行失败也无法恢复。
  • 无通知:事件执行状态(成功或失败)无法主动通知到用户(短信、Email等)。
为解决这些问题,推荐您使用DMS的任务编排功能,它并不依赖数据库内核的事件调度能力,而是一个外部独立的任务编排与调度系统。任务编排功能的特点如下:
  • 支持十几种数据库引擎(MySQL、Oracle、PostgreSQL、SQL Server等)和多种生态工具(数据迁移、备份、跨库分析等),可以轻松实现跨库、跨产品功能组合联动。
  • 支持可视化的编辑界面,可以通过拖拽和简单的配置即可创建出十分复杂的调度任务。
  • 支持多种消息通知机制(钉钉、短信、邮件等)。
  • 支持暂停终止重跑等多种运维操作。

操作步骤

本示例通过DMS任务编排实现event_click_archive事件。该事件的描述:希望从2020年12月1日开始,每天0点钟把user_click表中两天前的数据转储到click_history表(历史表)中并删除user_click表中的对应数据,user_click表中始终只保留当前日期前一天的数据。

该事件的SQL代码如下。

DELIMITER |

CREATE EVENT IF NOT EXISTS event_click_archive
ON SCHEDULE EVERY 1 DAY STARTS '2020-12-01 00:00.00'
ON COMPLETION PRESERVE
COMMENT '定期归档user_click表数据'
DO
  BEGIN
    INSERT INTO click_history SELECT * FROM user_click
      WHERE create_time < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY);
    DELETE FROM user_click WHERE create_time < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY);
  END |

DELIMITER ;
  1. 登录数据管理DMS 5.0
  2. 在顶部菜单栏中,选择集成与开发(DTS) > 数据开发 > 任务编排(老)
  3. 单击新增任务流
  4. 新建任务流对话框,将任务流名称设置为df_archive_click,将描述设置为测试,单击确认。即会进入任务编排页面。
    新建任务流
  5. 任务编排页面的左侧任务类型中,选择数据加工 > 单实例SQL并拖拽至画布的空白区域
  6. 在画布中双击单实例SQL节点,配置以下信息。
    1. 数据库列表中,选择目标实例。
    2. 输入以下建表语句。
      INSERT INTO click_history SELECT * FROM user_click
            WHERE create_time < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY);
            
      DELETE FROM user_click WHERE create_time < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY);
      说明 任务编排并不支持 本地变量(Local Variable)。如果事件定义中使用了本地变量,那么在迁移至任务编排中的时候,需统一修改为 用户自定义变量(User-Defined Variables)并用 SET命令进行赋值。如下是一组示例。

      事件定义中的SQL:

      DECLARE n_total BIGINT DEFAULT 0;
      SELECT COUNT(*) INTO n_total FROM test_table;

      任务编排中的SQL:

      SET @n_total := (SELECT COUNT(*) FROM test_table);
    3. 完成以上配置后,单击保存按钮。
      说明 如果您勾选了 自动保存,在配置过程中系统会自动保存修改, 保存按钮将不可用。
  7. 单击页面左上方的试运行按钮进行测试。
    • 如果执行日志的最后一行出现status SUCCEEDED,表明任务试运行成功。
    • 如果执行日志的最后一行出现status FAILED,表明任务试运行失败,在执行日志中查看执行失败的节点和原因,修改配置后重新尝试。
  8. 在生成报表任务流画布的下方,配置、查看任务流相关信息。
    1. 单击任务流信息页签,在基础属性区域,修改任务流名称描述责任人相关人员,选择错误处理策略并发控制策略
    2. 任务流信息页签的调度配置区域,打开开启调度开关,配置调度周期。
      表 1. 调度周期配置表
      配置项 说明
      调度类型 选择调度类型,本示例选择周期调度
      • 周期调度:周期性调度任务,例如一周执行一次任务。
      • 调度一次:在指定时间执行一次任务,仅需要配置执行任务的具体时间。
      生效时间 选择调度周期生效的区间,默认1970-01-01~9999-01-01,表示一直生效。

      本示例配置为2020-12-01~9999-01-01

      调度周期 选择调度任务的周期,本实例选择
      • 小时:按设定的小时执行任务调度,需要配置定时调度。
      • :按每日一次的频率执行任务调度,需要配置每日调度的具体时间。
      • :以周为周期,每个指定天执行一次任务调度,需要配置指定时间和具体时间。
      • :以月为周期,每个指定天执行一次任务调度,需要配置指定时间和具体时间。
      具体时间 设置执行任务流的具体时间。

      本示例配置00:00,系统从2020年12月1日开始,每天0点自动按天调度(执行)该任务。

      cron表达式 不需要手动配置,系统会根据您配置的周期、具体时间自动展现。
    3. 单击通知配置页签,打开通知开关,系统会根据任务流执行结果,给您发送相应的通知消息。
      • 成功通知:任务流执行成功。
      • 失败通知:任务流执行失败。
      • 超时通知:任务流执行超时。
  9. 发布任务流。具体操作,请参见发布或下线任务流

查看任务流的执行状态

  1. 登录数据管理DMS 5.0
  2. 在顶部菜单栏中,选择集成与开发(DTS) > 数据开发 > 任务编排(老)
  3. 单击任务流名称,进入任务流详情页面。
  4. 单击画布右上方前往运维,在任务流运维页面查看。
    • 在任务流运维页面上方,查看任务流的创建时间修改时间调度配置情况、是否发布状态等基本信息。
    • 单击运行记录页签,选择调度触发手动触发,查看任务流运行记录。
      说明
      • 调度触发:通过调度或指定时间的方式运行任务流。
      • 手动触发:通过手动单击试运行的方式运行任务流。
      • 单击状态列前的加,查看任务流运行日志。
      • 操作列中,单击执行历史,查看任务流的操作时间操作人员操作内容
      • 操作列中,对不同执行状态的任务流进行终止重跑暂停恢复置成功的操作。
        说明
        • 对于执行成功的任务流,可以进行重跑操作。
        • 对于执行失败的任务流,可以将该任务流运行记录的状态置为成功。
        • 对于执行中的任务流,可以终止或暂停任务流运行。
    • 单击发布列表页签,查看任务流的版本ID发布人发布时间、版本详情DAG图

      您还可以选中任意2个版本ID,单击版本对比,查看版本的对比信息。