依赖上一周期是指依赖某个节点的上一周期实例,即跨周期依赖某节点上一周期实例是否正常执行。
DataWorks支持以下三种跨周期依赖形式:
一层子节点
节点依赖关系:依赖当前节点的下游。例如节点A存在B、C、D三个下游节点,依赖一层子节点是指节点A依赖B、C、D三个节点的上一周期,即本次节点是否运行取决于上一周期下游节点是否运行成功。
业务场景:本次(本周期)节点的运行,依赖下游节点上一周期对本节点上一周期结果表(即本节点输出表)的数据清洗结果是否成功。如果您需要查看下游节点对当前节点数据的清洗结果是否符合预期,可以对下游节点产出的结果表配置数据质量规则。
本节点
节点依赖关系:跨周期自依赖(依赖当前节点的上一周期),即本次节点是否运行取决于上一周期本节点是否运行成功。
业务场景:本周期节点运行依赖上一周期该节点业务数据的产出情况。如果需要查看节点数据清洗结果是否符合预期,可以对节点产出的结果表配置数据质量监控规则。
自定义:手动输入需要依赖的其他节点,此处需要输入节点ID。如果存在多个节点,需要使用英文逗号(,)分隔,例如12345,23456:
节点依赖关系:手动输入需要依赖的节点,本周期节点运行取决于自定义依赖的节点上一周期该是否运行成功。
业务场景:业务逻辑上需要依赖其它业务的数据正常产出,但本节点中没有操作该业务数据。
依赖上一周期和依赖本周期的区别:在运维中心中查看节点依赖关系时,所有跨周期依赖的节点都会以虚线的形式展示。
下线节点时需要删除节点依赖关系,需要删除的依赖关系包括跨周期依赖和同周期依赖。
您可以根据业务需求选择需要依赖的上游节点的周期。通常同周期依赖和跨周期依赖只需要选择一个,自动解析默认依赖上游同周期。如果需要修改,请删除同周期依赖,再添加跨周期依赖。详情请参见调度依赖逻辑说明。
下图为业务流程节点的依赖关系。
运维中心页面为您展示业务流程的依赖关系。
以配置 xc_create 节点代码为例。
以节点 xc_create 为例,在代码编辑区编写 CREATE TABLE xc_1 和 CREATE TABLE xc_2 的 DDL 语句后,单击调度配置面板中的从代码解析输入输出,系统自动在本节点输出名称中生成 test.xc_1 和 test.xc_2 两条输出记录,添加方式为代码解析。跨周期依赖区域可勾选本节点、一级子节点或其他节点。
以配置 xc_select 节点代码为例。
xc_select 节点的代码编辑区包含 SELECT * FROM xc_1; 和 SELECT * FROM xc_2; 两条 SQL 语句。通过从代码解析输入输出功能,系统自动将 test.xc_1 和 test.xc_2 解析为该节点的上游依赖节点,即 xc_select 节点依赖 xc_create 节点产出的两张表。
依赖上一周期:一层子节点
节点依赖:依赖当前节点的下游。例如,下游节点的上一周期是否运行成功。比如节点A存在下游节点B、C、D三个节点,依赖一层子节点是节点A依赖B、C、D三个节点的上一周期。
业务场景:本周期该节点是否进行数据清洗取决于下游节点上一周期对本节点的结果表(即本节点输出表)数据清洗的结果。如果下游节点的上一周期运行成功,本周期的节点实例开始运行,否则将不能运行。
xc_create 选择依赖一层子节点。
在调度配置面板底部的跨周期依赖(原上一周期)区域,勾选一级子节点复选框。
运维中心页面为您展示各节点的依赖关系。
依赖上一周期:本节点
节点依赖:本周期节点是否运行取决于上一周期本节点是否运行成功。如果上一周期本节点未完成,将阻碍本周期节点运行。
业务场景:本次节点是否进行数据清洗取决于上一周期本节点数据清洗情况。此处设置节点为小时调度以便查看。
您可以进入页面,查看节点的依赖情况。
小时节点设置自依赖(依赖上一周期:本节点)的情况下,如果本节点上一周期实例未成功运行,则该节点下一个小时实例也不会执行。
例如,每小时调度的任务,如果第一个实例执行失败了或者未运行,则当天该节点的其它小时实例也不会运行。
依赖上一周期:自定义节点
节点依赖:代码中没有用到1000374815节点的产出表,但业务上需要依赖该1000374815节点的上一周期是否正常产出数据。从节点关系来说,xc_create节点需要依赖1000374815节点的上一周期。
业务场景:业务逻辑上需要依赖1000374815节点正常产出的业务数据,但本节点(xc_create)中没有操作该业务数据(没有select1000374815节点产出的结果表)。
xc_create 节点依赖的上游自定义选择 1000374815 节点。
在调度配置面板的跨周期依赖区域,勾选其他节点,在输入框中填写节点 ID 1000374815,单击添加。
您可以进入页面,查看节点的依赖情况。
依赖上一周期高级配置
考虑到某些分支节点的下游有两个节点,通常只有一个节点被选中,另外一个节点会被置为空跑,同时该空跑属性会不断向下传导至其子节点的情况,DataWorks新增了上游节点空跑属性不进行跨周期传导的调度特性。
但如果下游分支节点中,某一个分支节点依赖自身的上一周期,同时上一周期节点未被选中,则该节点会永远空跑。
例如,节点(我是左边)被置为空跑,则其下游节点也会被置为空跑。
为了满足下一周期的节点是否运行由下一周期的分支节点决定,而不是上一周期的空跑属性来决定的需求,您可以进行以下操作:
单击节点编辑页面右侧的调度配置。
在时间属性区域,选中依赖上一周期。
单击高级配置。
选中上游节点空跑属性不进行跨周期传导,该任务将不被上一周期分支节点的空跑属性影响。
在跨周期依赖(原上一周期)区域,勾选本节点。将跳过上游的空跑属性设置为是。
普通节点上一周期的空跑属性不适用该选项,仅分支节点未被选中导致的空跑属性会被影响。
跨周期依赖的典型场景
实时场景一:
场景描述:天任务依赖小时任务,但不想等24个小时任务实例运行结束才运行天任务,希望天任务能够在定时时间12:00时运行。
解决方案:上游小时任务配置为,设置下游天任务的定时调度时间为12:00,且天任务无需设置跨周期依赖。
待上游小时任务定时时间12点的实例运行成功后,下游天任务便会运行。
实时场景二:
实时场景:天任务依赖小时任务昨天的数据。
解决方案:下游天任务配置为,输入上游小时任务的ID。
实时场景三:
实时场景:小时任务依赖天任务,当上游天任务运行结束,下游小时任务多个周期定时时间已到,导致小时任务多周期并发调起,该如何处理?
解决方案:下游小时任务配置为。
实时场景四:
实时场景:本节点依赖自己上一周期产出的数据,如何确认上一周期产出的时间?
解决方案:本节点配置为。