单个任务同天执行两种调度频率

分支节点是DataStudio中提供的逻辑控制系列节点之一。本文将为您介绍通过DataStudio中提供的分支节点(逻辑控制系列节点之一),实现单个任务在业务量处于较高水平时报表任务延迟产出;业务量较低时,报表即时产出的业务需求。

场景介绍

在生产过程中,经常会遇到在凌晨时段业务量处于较高水平,分钟级的报表任务通常可以延迟产出,而其余时段业务量较低,报表需要即时产出的情况。为满足业务输出需求,需要将同一任务按照两种调度周期执行,目前常规的Cron表达式是无法实现该业务场景的。本文通过DataWorks提供的分支节点可以帮助您实现单个任务在00:00-08:00期间每小时调度一次,其它时间段每5分钟调度一次的业务需求。详情请参见分支节点

前提条件

已购买DataWorks标准版及以上版本,详情请参见DataWorks各版本详解

说明

仅DataWorks标准版及以上版本支持使用分支节点。

实现原理

业务实现原理,如下图所示:

image

  1. 通过赋值节点的内部代码逻辑对实例执行时间进行划分。

    说明
    • 需要执行任务实例的时间返回1

    • 不需要执行任务实例的时间返回-1

  2. 下游的分支节点接收到赋值节点的输出值时,进行逻辑判断,参数大于0设为执行条件,参数小于0设为空跑条件。

  3. 将执行节点挂载到执行条件下,空跑节点挂载到空跑条件下。确保在不需要执行任务实例的时间段执行空跑节点。需要执行任务实例的时间段走执行节点。

    说明

    空跑节点仅作为验证节点使用,实际生产中可以忽略。执行节点可作为虚拟节点,将实际业务节点挂载到该虚拟节点下方来实现业务的执行流转。

操作步骤

步骤一:创建赋值节点

  1. 进入数据开发页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据开发与治理 > 数据开发,在下拉框中选择对应工作空间后单击进入数据开发

  2. 新建赋值节点。

    1. 右键单击目标业务流程,选择新建节点 > 通用 > 赋值节点

      说明

      您也可以鼠标悬停至新建,选择新建节点 > 通用 > 赋值节点

    2. 新建节点对话框中,输入名称,并选择节点类型路径。单击确认,进入赋值节点编辑页面。

      说明

      节点名称支持大小写字母、中文、数字、下划线(_)和小数点(.)。

  3. 开发赋值节点任务。

    赋值节点支持ODPS SQL、SHELL和Python三种语言编写开发任务,本文采用ODPS SQL语言进行示例说明。

    SELECT CASE WHEN CAST(to_char(getdate(),'hh') AS BIGINT ) >= 0 AND CAST(to_char(getdate(),'hh') AS BIGINT ) < 8 AND CAST(to_char(getdate(),'mi') AS BIGINT ) >=5 THEN -1 ELSE 1 END AS do_flag;
    -- do_flag 脚本执行结果别名仅作为别名使用,不影响调度配置中本节点输出参数。
    说明
    • to_char(getdate(),'hh')函数是用于获取当前时间中具体小时数的函数。

    • to_char(getdate(),'mi')函数是用于获取当前时间中具体分钟数的函数。

    • 该节点输出参数默认为右侧调度配置中的本节点输出参数outputs,该节点输出值会被DataWorks捕获,传递给下游分支节点。

  4. 单击保存图标,保存编写的SQL语句。

步骤二:创建分支节点

  1. 新建分支节点。

    1. 右键单击目标业务流程,选择新建节点 > 通用 > 分支节点

      说明

      您也可以鼠标悬停至新建,选择新建节点 > 通用 > 分支节点

    2. 新建节点对话框中,输入名称,并选择节点类型路径。单击确认,进入分支节点编辑页面。

      说明

      节点名称支持大小写字母、中文、数字、下划线(_)和小数点(.)。

  2. 添加分支。

    1. 在分支节点编辑页面左上角单击添加分支按钮。

    2. 在对话框中,输入分支条件关联到节点输出分支描述信息,单击确认

      分支条件

      关联到节点输出

      分支描述

      ${input}<0

      空跑条件

      非必填

      ${input}>0

      执行条件

      非必填

      说明

      分两次添加上面表格中的分支条件、关联到节点输出、分支描述内容信息。

  3. 添加依赖关系。

    在页面右边框位置找到调度配置参数,在调度依赖依赖的上游节点下拉选择节点名称,在输入框中输入步骤一中创建的赋值节点名称,选择后缀名为_out的赋值节点,单击添加按钮。

  4. 添加输入参数。

    调度配置参数页面,单击打开节点上下文参数内容,单击本节点输入参数旁边的添加按钮。在参数名中写入变量input,在取值来源下拉框选择您创建的赋值节点输出源,单击保存按钮。

  5. 在分支节点编辑页面单击保存图标,保存创建的分支节点。

步骤三:创建ODPS SQL任务节点

  1. 新建空跑和执行任务节点。

    1. 右键单击目标业务流程,选择新建节点 > MaxCompute > ODPS SQL

      说明

      您也可以鼠标悬停至新建,选择新建节点 > MaxCompute > ODPS SQL

    2. 新建节点对话框中,输入名称,并选择引擎实例节点类型路径。单击确认,进入ODPS SQL节点编辑页面。

      说明

      节点名称支持大小写字母、中文、数字、下划线(_)和小数点(.)。

  2. 编写ODPS SQL任务脚本。

    1. 编写ODPS SQL任务空跑节点示例代码。

      SELECT '这是一个任务空跑节点';

      在页面右边框位置找到调度配置参数,在调度依赖依赖的上游节点下拉选择节点名称,在输入框中输入步骤二中创建的分支节点名称,选择分支节点中的空跑条件分支,单击添加按钮完成空跑节点挂载。单击保存图标,保存编写的SQL语句。

    2. 编写ODPS SQL任务执行节点示例代码。

      SELECT '这是一个任务执行节点';-- 该节点可以替换成实际业务处理,此处仅做逻辑实现展示

      同理,参照上述步骤选择分支节点中的执行条件分支,单击添加按钮完成执行节点挂载。单击保存图标,保存编写的SQL语句。

结果验证

完成上述所有配置后,您可以提交并发布业务流程。业务流程发布完成后,您可以设置每5分钟定时执行一次该业务流程。待业务流程执行完成,右键单击任务空跑、任务执行两个任务节点,在任务节点上单击查看日志按钮查看日志。

您可在次日查看任务空跑节点、任务执行节点执行日志情况,示例如下:

  • 07:00~07:05之间任务执行节点正常执行,控制台打印这是一个任务执行节点内容。空跑任务节点会被置为空跑,打印It's set condition-skip by task内容。

  • 07:05~08:00之间任务执行节点会被置为空跑,打印It's set condition-skip by task内容。空跑任务控制台正常执行,打印这是一个任务空跑节点内容。