任务编排之电商打标

数据管理DMS任务编排主要用于编排各类任务并进行调度执行。您可以通过创建一个或多个任务节点组成的任务流,实现复杂的任务调度,提高数据开发效率。

背景信息

电商做大促活动时,常会推出优惠活动,例如用户累计消费达到一定额度,发放对应额度的优惠券。本文使用任务编排中的单实例SQL赋值节点条件分支节点和单实例SQL节点,在数据库层面实现该需求。

前提条件

您需要准备一个数据库,且拥有该数据库的变更权限。如需申请权限,请参见访问控制权限概述

环境准备

  1. 登录数据管理DMS 5.0
  2. 单击控制台左上角的2023-01-28_15-57-17.png图标,选择全部功能 > SQL窗口 > SQL窗口

    说明

    若您使用的是非极简模式的控制台,在顶部菜单栏中,选择SQL窗口 > SQL窗口

  3. 请先选择数据库对话框中,搜索并选择数据库,单击确认

  4. 创建配置表、业务表、消费券发放表。

    1. 创建表名为activity_setting的配置表。将下列建表SQL语句粘贴到SQL书写区域,单击执行

      建表SQL语句:

      CREATE TABLE `activity_setting` (
          `has_promotion` tinyint(1) NOT NULL COMMENT '是否有优惠活动',
          `consumption_limit` int(11) NOT NULL COMMENT '消费额限制',
          `quota` int(11) NOT NULL COMMENT '发放优惠券额度',
          PRIMARY KEY (`has_promotion`)
      ) ENGINE=InnoDB
      DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
      ROW_FORMAT=COMPACT
      AVG_ROW_LENGTH=16384;
    2. 创建表名为consumption_records的业务表。将下列建表SQL语句粘贴到SQL书写区域,单击执行

      建表SQL语句:

      CREATE TABLE `consumption_records` (
          `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '流水号',
          `time` datetime NOT NULL COMMENT '消费时间',
          `count` int(11) NOT NULL COMMENT '消费额',
          `user_id` bigint(20) NOT NULL COMMENT '用户id',
          PRIMARY KEY (`id`)
      ) ENGINE=InnoDB
      DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci
      COMMENT='消费记录表'
      AUTO_INCREMENT=8001
      ROW_FORMAT=COMPACT
      AVG_ROW_LENGTH=54;
    3. 创建表名为voucher_send_list的优惠券发放表。将下列建表SQL语句粘贴到SQL书写区域,单击执行

      建表SQL语句:

      CREATE TABLE `voucher_send_list` (
          `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水号',
          `user_id` int(11) NULL COMMENT '用户id',
          `consumption_sum` int(11) NULL COMMENT '消费额',
          `quota` int(11) NULL COMMENT '优惠券数额',
          PRIMARY KEY (`Id`)
      ) ENGINE=InnoDB
      DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
      AUTO_INCREMENT=1
      ROW_FORMAT=COMPACT
      AVG_ROW_LENGTH=0;
  5. 在配置表中插入数据。将下列SQL语句粘贴到SQL区域,单击执行

    新增数据SQL语句:

    INSERT INTO activity_setting( has_promotion, consumption_limit, quota)
    VALUES('1','100','30');
  6. 业务表中插入数据。使用测试数据构建功能生成数据,具体请参见测试数据构建

    构建配置表consumption_records的数据,配置如下:

    数据构建

操作步骤

  1. 创建配置表、业务表和消费券发放表,并写入数据。具体操作请参见环境准备

  2. 新增任务流。

    1. 登录数据管理DMS 5.0

    2. 在顶部菜单栏中,选择集成与开发 > 数据开发 > 任务编排

    3. 单击新增任务流

    4. 新建任务流对话框中,输入任务流名称描述,单击确认

  3. 编排任务节点。

    1. 在左侧任务类型列表中,分别拖拽单实例SQL赋值条件分支单实例SQL节点到画布空白区域。

    2. 连接节点形成任务流。

      将鼠标放在单实例SQL赋值节点上,单击单实例SQL赋值节点右侧出现的空心圆点并拉出连接线,连接至条件分支节点上。

      将鼠标放在条件分支节点上,单击条件分支节点右侧出现的空心圆点并拉出连接线,连接至单实例SQL节点上。

    image.png

  4. 配置任务节点。

    1. 选中单实例SQL赋值,配置单实例SQL赋值节点。更多信息,请参见配置单实例SQL赋值

      1. 选择目标数据库。

      2. 在SQL区域输入如下SQL语句。

        select * from activity_setting limit 1
      3. 在页面右侧的变量设置区域,增加三个输出变量:Quota(发放红包额度)、HasPromotion(是否有优惠活动)、ConsumptionLimit(消费额度限制)。

        image.png

    2. 选中条件分支,配置条件分支节点。具体操作,请参见配置条件分支

      配置条件表达式如下:1 条件表达式

    3. 选中单实例SQL,配置单实例SQL节点。

      输入SQL语句如下:

      INSERT INTO `voucher_send_list`(`user_id`,`consumption_sum`,`quota`)
      SELECT * FROM
      (SELECT `user_id`, sum(count) AS consumption_sum,${Quota} FROM `consumption_records`
       WHERE `time` > '${bizdate}'  GROUP BY `user_id`) `consumption_records`
      where `consumption_sum`>${ConsumptionLimit}
  5. 单击画布左上方的试运行按钮,试运行任务流。

    试运行截图

    您可以在SQL窗口中,查看表voucher_send_list中的数据,数据已成功插入优惠券发放表中。1 优惠结果

  6. 可选:配置周期调度。

    1. 在编辑任务流页面,单击页面下方的任务流信息页签。

    2. 调度配置区域,打开开启调度开关,配置调度。具体配置,请参见调度周期配置表

  7. 发布任务流。任务流发布后,此任务流会根据设置的调度周期自动执行。

    1. 单击画布左上角的发布

    2. 发布对话框中输入备注信息,并单击确认,发布任务流。