DataWorks的调度依赖中,跨周期(即依赖上一周期),是指本次节点的周期实例运行依赖某个节点的上一周期实例运行,即节点当前周期实例是否运行取决于其所依赖的节点上一周期实例是否正常运行。本文为您介绍跨周期依赖的配置说明及依赖形式。

配置说明

您需要进入数据开发节点的编辑页面,单击右侧导航栏的调度配置,在调度配置 > 调度依赖区域配置节点的依赖关系。DataWorks的调度依赖支持配置为依赖同周期和依赖上一周期两种方式。调度依赖两种调度依赖的区别如下表所示。
依赖方式 业务逻辑及使用场景 依赖关系展示
依赖同周期 当前节点依赖的上游表数据为某一节点当天产出的表数据(即当前节点代码中使用SELECT语句操作的表,为某一节点当天产出的表数据),此时,为了保障当前节点运行时能够成功取上游表数据,则需要为当前节点设置同周期依赖于产出上游表数据的节点。 在运维中心查看节点依赖关系时,同周期的依赖关系会以实线展示。进入运维中心查看任务依赖关系,详情请参见运维中心概述
依赖上一周期 当前节点依赖的上游表数据为某一节点上一周期产出的表数据(即当前节点代码中使用SELECT语句操作的表,为某一节点上一周期产出的表数据),此时,为了保障当前节点运行时能够成功取上游表数据,则需要为当前节点设置跨周期依赖于产出上游表数据的节点。 在运维中心查看节点依赖关系时,依赖上一周期的依赖关系会以虚线展示。进入运维中心查看任务依赖关系,详情请参见运维中心概述

依赖形式

依赖上一周期支持的依赖形式如下表所示。
依赖形式 节点依赖关系 业务场景
依赖上一周期:本节点

本节点本次实例运行,依赖于本节点上一周期的实例运行结果。即本次节点是否运行,取决于本节点上一周期的实例是否运行成功。

本节点本次实例运行,取决于本节点上一周期业务数据的产出情况。

依赖上一周期:一级子节点

本节点本次实例运行,取决于下游节点上一周期的实例运行情况。即本次节点是否运行,取决于该节点的下游节点在上一周期的实例是否运行成功。

例如:节点A包含B、C、D三个下游节点,依赖一层子节点是指节点A依赖B、C、D三个节点在上一周期的运行结果。当B、C、D三个节点上一周期均运行成功时,本次节点A才会启动运行。

本节点本次实例的运行,依赖于该节点的下游节点在上一周期对本节点上一周期结果表(即本节点输出表)数据的清洗结果是否成功。

依赖上一周期:其他节点
本节点本次实例的运行,依赖于其他节点在上一周期的实例运行结果。即本次节点是否运行,取决于其依赖的其他节点在上一周期实例是否运行成功。
说明 依赖的其他节点需要您手动输入节点ID或按节点名称搜索。

本节点本次实例运行,在业务逻辑上需要依赖其它业务的数据,但本节点中不包含涉及其他业务数据的相关操作。

您还可以为依赖上一周期:本节点依赖上一周期:其他节点依赖形式配置沿用上游的空跑属性,详情请参见是否沿用上游的空跑属性

依赖上一周期:本节点

  • 节点依赖关系

    本节点本次实例运行,依赖于本节点上一周期的实例运行结果。即本次节点是否运行,取决于本节点上一周期的实例是否运行成功。

  • 业务场景

    本节点本次实例运行,取决于本节点上一周期业务数据的产出情况。

  • 设置本节点依赖后对当前节点调度的影响
    • 场景示例一(天调度):
      • 假设WorkflowRoot、Node_A均为天调度节点。
      • Node_A设置了本节点依赖。
      • Node_A在本周期(T)生成的周期实例名称为Instance_A
      • Node_A在上一周期(T-1)生成的周期实例名称为Instance_A'
      天调度自依赖配置依赖上一周期:本节点后,Instance_A的运行依赖于WorkflowRootInstance_A'的运行结果,当上述两个周期实例均运行成功后,Instance_A才会启动运行。
    • 场景示例二(小时、分钟调度):
      • 假设WorkflowRoot为天调度虚拟节点,Node_A为小时调度节点。
      • Node_A从00:00点开始至23:59点,每8小时调度一次,则其定时调度时间为00:00(第一周期T1)、08:00(第二周期T2)、16:00(第三周期T3)。
      • Node_A节点在T1、T2、T3生成的周期实例名称分为Instance_A1Instance_A2Instance_A3
      • Node_A设置了本节点依赖。
      小时调度对本节点的影响
      • 当小时调度节点Node_A依赖天调度虚拟节点WorkflowRoot,小时调度节点不设置本节点依赖时,则小时调度节点当天的所有周期实例(即Instance_A1Instance_A2Instance_A3)在满足运行条件的情况下,可以同时被上游虚拟节点调度。
      • 当小时调度节点Node_A依赖天调度虚拟节点WorkflowRoot,小时调度节点设置本节点依赖后,则小时调度节点运行当天的周期实例,仅第一个周期实例(即T1的Instance_A1)依赖上游虚拟节点,其他周期实例则依赖自己的上一个小时实例(即Instance_A2依赖Instance_A1Instance_A3依赖Instance_A2)。仅当依赖的上一个周期实例运行成功后,当前周期实例才会启动运行。
      说明 本场景以小时任务示例,分钟任务调度逻辑类似。
  • 设置本节点依赖后对下游节点调度的影响(小时、分钟任务)
    • 假设WorkflowRoot为天调度虚拟节点,Node_A为小时调度节点,Node_B、Node_C为天调度节点,且Node_B、Node_C为Node_A的子节点。
    • Node_A从00:00点开始至23:59点,每8小时调度一次,则其定时调度时间为00:00(第一周期T1)、08:00(第二周期T2)、16:00(第三周期T3)。
    • Node_B每天00:00运行,Node_C每天08:00点运行。
    • Node_A节点在T1、T2、T3生成的周期实例名称分为Instance_A1Instance_A2Instance_A3
    • Node_B、Node_C生成的周期实例名称分别为Instance_BInstanceC
    • Node_A设置了本节点依赖。
    周期实例
    • 当小时调度节点Node_A依赖天调度虚拟节点WorkflowRoot,小时调度节点不设置本节点依赖时,各下游节点运行情况如下:
      • Node_A当天的所有周期实例Instance_A1Instance_A2Instance_A3,同时被上游虚拟节点调度。
      • Node_A下游的周期实例Instance_BInstanceC依赖小时任务当天所有的周期实例运行,即仅当Instance_A1Instance_A2Instance_A3全部运行成功后,Instance_BInstanceC才会启动运行。
    • 当小时调度节点Node_A依赖天调度虚拟节点WorkflowRoot,小时调度节点设置本节点依赖后,各下游节点运行情况如下:
      • Node_A当天的所有周期实例均依赖于其上一个周期的实例。即T1的Instance_A1依赖虚拟节点WorkflowRoot、T2的Instance_A2依赖T1的Instance_A1、T3的Instance_A3依赖T2的Instance_A2。仅当依赖的上一周期实例运行成功后,当前实例才会运行。
      • Node_A下游的周期实例Instance_BInstanceC依赖距离自己的定时运行时间最近的实例。

        00:00点运行的Instance_B会在T1的Instance_A1运行成功后执行,此时InstanceC不会执行。

        08:00点运行的InstanceC会在T2的Instance_A2运行成功后执行。

依赖上一周期:一级子节点

  • 节点依赖关系

    本节点本次实例运行,取决于下游节点上一周期的实例运行情况。即本次节点是否运行,取决于该节点的下游节点在上一周期的实例是否运行成功。

    例如:节点A包含B、C、D三个下游节点,依赖一层子节点是指节点A依赖B、C、D三个节点在上一周期的运行结果。当B、C、D三个节点上一周期均运行成功时,本次节点A才会启动运行。

  • 业务场景

    本节点本次实例的运行,依赖于该节点的下游节点在上一周期对本节点上一周期结果表(即本节点输出表)数据的清洗结果是否成功。

  • 场景示例
    • 假设WorkflowRoot、Node_A、Node_B、Node_C均为天调度节点。
    • Node_B、Node_C为Node_A的一级子节点。
    • Node_A、Node_B、Node_C节点在本周期(T)生成的周期实例名称分别为Instance_AInstance_BInstance_C
    • Node_A、Node_B、Node_C节点在上一周期(T-1)生成的周期实例名称分别为Instance_A'Instance_B'Instance_C'
    一层子节点配置依赖上一周期:一级子节点后,本周期(T)Instance_A的运行依赖于WorkflowRoot、上一周期(T-1)Instance_B'、上一周期(T-1)Instance_C'的运行结果,当上述三个周期实例均运行成功后,Instance_A才会启动运行。

依赖上一周期:其他节点

  • 节点依赖关系
    本节点本次实例的运行,依赖于其他节点在上一周期的实例运行结果。即本次节点是否运行,取决于其依赖的其他节点在上一周期实例是否运行成功。
    说明 依赖的其他节点需要您手动输入节点ID或按节点名称搜索。
  • 业务场景

    本节点本次实例运行,在业务逻辑上需要依赖其它业务的数据,但本节点中不包含涉及其他业务数据的相关操作。

  • 场景示例
    • 假设WorkflowRoot_1、WorkflowRoot_2、Node_A、Node_B、Node_C节点均为天调度节点。
    • Node_A、Node_B、Node_C属于不同的业务流程。

      Node_A、Node_B为WorkflowRoot_1的子节点,Node_C为WorkflowRoot_2的子节点。

    • Node_A设置依赖上一周期:其他节点依赖Node_C。
    • Node_A、Node_B、Node_C节点在本周期(T)生成的周期实例名称分别为Instance_AInstance_BInstance_C
    • Node_A、Node_B、Node_C节点在上一周期(T-1)生成的周期实例名称分别为Instance_A'Instance_B'Instance_C'
    自定义依赖配置依赖上一周期:其他节点后,本周期(T)Instance_A的运行依赖于WorkflowRoot_1、上一周期(T-1)Instance_C'的运行结果,当上述两个周期实例均运行成功后,Instance_A才会启动运行。

是否沿用上游的空跑属性

  • 应用场景
    通常,某些节点包含两个下游节点,在任务执行过程中,下游节点只有一个节点会正常运行,另一个节点则会被置为空跑状态。此时,当下游的空跑节点配置了依赖自身的上一周期,则该节点的空跑属性会不断向下传递至其子节点,导致出现该节点持续空跑的情况。当您不需要子节点延续被依赖节点的空跑属性时,可以在调度依赖中设置沿用上游的空跑属性
    说明 普通节点上一周期的空跑属性不会延续至下游节点,仅分支节点空跑时,其空跑属性会延续至下游节点。
  • 场景示例
    • 假设Assign_Ndoe为赋值节点,Branch_Node为分支节点,Shell_Node1、Shell_Node2为Branch_Node的下游节点。该节点均为天调度节点。
    • 实际运行时,Shell_Node1被置为空跑,Shell_Node2正常运行。
    • Shell_Node1节点设置了依赖自身的上一周期。
    • 本周期(T)Shell_Node1节点生成的周期实例名称为Shell_Node1'
    • 上一周期(T-1)Shell_Node1节点生成的周期实例名称为Shell_Node1
    高级配置示例本周期(T)的周期实例Shell_Node1',会依赖上一周期(T-1)的周期实例Shell_Node1运行,下游节点会延续上游节点的空跑属性,导致Shell_Node1节点永远空跑。您可以在调度依赖中配置沿用上游的空跑属性,从而使下游节点不被上一周期该节点的空跑属性影响。设置沿用空跑属性

应用场景案例

依赖上一周期的典型应用场景案例,详情请参见场景2:依赖上一周期的结果时,如何配置调度依赖