DataWorks的调度依赖是指周期调度节点间的上下游依赖关系。通过节点的依赖关系有序调度运行上下游节点,即当上游节点运行成功后,下游节点才会启动运行,保障适时的产出有效业务数据。本文为您介绍调度依赖的配置指引,避免因调度依赖配置有误导致数据异常,配置前建议先了解此内容。

说明
  • 任务定时时间:定义该任务在调度场景下的预期执行时间。
  • 任务依赖关系:定义任务所依赖的上游。通常,上游依赖均存在数据间的依赖关系。
因此,任务实际运行时间除取决于任务本身的定时时间外,还取决于上游任务的完成时间(即下游任务实际执行时间还取决于上游任务的定时时间)。若上游任务未完成运行,即便下游任务的定时时间早于上游任务,下游任务也不会运行。详情请参见依赖关系对任务执行的影响

调度依赖的配置指引

DataWorks任务依赖最终是为了保障下游取数无误,实际是上下游表数据的血缘依赖。您可根据业务需求,选择是否需要基于表的血缘关系配置调度依赖。节点的调度依赖配置流程如下。调度依赖

不基于血缘,自定义节点的调度依赖关系

若DataWorks上任务间不存在强血缘依赖(例如,不强依赖上游某个分区数据,仅取上游当前时间点最大分区数据),或依赖的数据非周期调度节点产出的表数据(例如,本地上传的表数据),则您可自定义节点的依赖关系。自定义依赖配置具体如下:
  • 依赖工作空间根节点。

    例如,同步任务中的上游数据来源于其他业务数据库,SQL类型任务对实时同步任务产出的表数据进行加工等场景,您可直接选择挂载依赖至工作空间根节点下。

  • 依赖虚拟节点。

    当工作空间中业务流程较多或较复杂时,您可通过虚拟节点管理该业务流程,将需要统一管控的节点挂载依赖至某虚拟节点,使工作空间下数据流转路径更加清晰。例如,控制业务流程整体调度时间、控制业务流程整体调度与冻结(即不调度)。

基于血缘配置节点的调度依赖关系

更多调度依赖相关注意事项,请参见注意事项
序号目标描述相关内容
①②确认上下游表是否存在强血缘关系。节点依赖关系配置后,默认在任务调度运行时,下游节点运行条件之一为其依赖的上游节点均已执行成功,否则当前任务取数会存在质量问题。

为避免当前任务执行时间不符合预期,您可先评估表之间是否存在强依赖血缘关系,确认是否需要基于血缘关系配置调度依赖。

强血缘依赖判断及配置调度依赖后的影响
确认当前场景是否为周期调度任务产出的表数据。DataWorks通过任务状态(即运行成功)判断数据是否产出,非周期性调度节点产出数据的表,DataWorks无法判断其状态,因此,包含该类表的场景不支持配置调度依赖。不支持调度依赖的场景(非周期性调度产出数据的表)
④⑤⑥基于血缘确认调度依赖的配置方式并配置调度依赖。

根据需要依赖上游昨天还是今天的数据、小时分钟任务是否要依赖自己上一个小时或分钟实例,来选择依赖上游同周期还是上一周期。

预览依赖关系。您可通过预览依赖功能,确认配置的依赖关系是否符合预期。

上下游节点的周期数不同,各周期的依赖关系不同。为避免配置的依赖不符合预期,建议使用该功能提前预览上下游调度周期数与定时时间不一致场景下,其实例依赖情况。

确认调度依赖的变更影响。节点提交时,您可通过对比代码解析结果,确认当前版本节点的依赖变更是否符合预期。
确认生产环境任务的依赖关系。节点发布后,建议您查看周期任务,确认生产调度任务的依赖是否符合预期。

DataWorks任务DAG图中,实线为同周期依赖,虚线为依赖上一周期。

强血缘依赖判断及配置调度依赖后的影响

由于节点依赖关系配置后,默认节点的上下游产出表存在强依赖关系(即下游表数据的产出需要依赖上游产出的表数据),因此,任务在配置调度依赖时,需确认是否存在强血缘依赖,即确认当前任务是否会因为上游数据未产出而导致当前任务取数出现问题。若下游节点中表数据的产出,需依赖上游节点产出的表数据,则认为上下游节点的表存在强血缘依赖关系。

节点配置调度依赖后,任务在调度运行时,下游节点需满足如下条件才会启动执行:
  • 到达节点的定时运行时间。
  • 其依赖的上游节点全部执行成功,确保下游节点依赖的表数据均已正常产出。

    所以,上游节点的定时运行时间将决定下游节点实际的最早执行时间。即使下游节点的定时运行时间早于上游节点,下游节点也需等上游节点执行成功后才会执行。

不支持调度依赖的场景(非周期性调度产出数据的表)

DataWorks的调度依赖主要用于保障周期调度节点定时更新的表数据,确保下游节点取数无误。因此,不在DataWorks上通过调度节点更新的表,DataWorks无法直接监控。非DataWorks周期性调度产出数据的表包括但不限于以下几类:
  • 实时同步产出的表
  • 从本地上传到DataWorks的表
  • 维表
  • 手动任务产出的表
  • 非DataWorks上调度节点产出的周期性变更的表
非DataWorks周期性调度产出数据的表,可自定义依赖关系,关于自定义依赖关系,详情请参见调度依赖的配置指引

基于表血缘选择调度依赖方式

DataWorks中,表血缘关系体现为产出表数据的节点间的依赖关系。在确认存在强血缘依赖后,建议基于节点的业务代码判断表的上下游血缘关系,再根据该血缘关系选择节点的调度依赖类型。任务实际调度时,产出数据的代码中会使用调度参数来指定依赖哪个周期实例的数据。基于血缘配置依赖

确认血缘并基于血缘选择依赖方式,需结合调度参数配置共同实现。调度参数会根据任务调度的业务日期、定时时间及参数的取值格式自动替换为具体的值,实现在任务调度时间内参数的动态替换,进而实现任务查询与产出的表分区变更。

基于表血缘选择调度依赖方式的步骤如下:
  1. 确认表的血缘关系。
    为保障任务调度产出的表数据符合预期,您需明确上下游表当天产出的业务数据,确保下游表当天获取的数据为上游表当天的产出数据。
    • 若为小时、分钟周期调度任务,则需明确每个小时、分钟周期实例产出的表分区数据。
    • 若无法看到上游调度参数配置(例如,依赖其他空间下的表场景),如何确认表血缘,可参见确认表血缘
  2. 基于血缘选择调度依赖的配置方式。
    明确表血缘后,您可根据血缘关系确定调度依赖的配置方式(即同周期依赖还是依赖上一周期)。
    调度依赖配置方式血缘关系
    同周期调度依赖下游依赖上游今天产出的表数据。
    依赖上一周期
    • 下游依赖上游昨天产出的表数据。
    • 小时、分钟任务特殊依赖场景:
      • 依赖自己上一个小时或分钟的周期实例数据,可设置跨周期依赖(即依赖上一周期:本节点(自依赖))。
      • 小时任务依赖小时任务,如果上下游的定时时间完全相同,设置跨周期依赖可以实现下游2点的实例依赖上游1点的实例。分钟任务依赖分钟任务,原理相同。

配置调度依赖

已确认血缘关系,并基于血缘确定了配置调度依赖的方式后,您可通过以下内容了解同周期依赖、依赖上一周期在DataWorks的配置实现。若需进一步了解同周期依赖与跨周期依赖界面功能及详细配置,请参见配置同周期调度依赖配置依赖上一周期(跨周期依赖)

同周期调度依赖

即下游节点依赖上游节点同周期实例产出的表数据,上游节点的输出作为下游节点的输入,形成节点的同周期依赖关系。同周期依赖方式同周期依赖的配置方式如下。
配置方式说明
通过业务流程面板拉线设置节点依赖该方式DataWorks将自动为下游节点添加上游节点带_out后缀的输出,形成节点依赖。
通过自动解析功能基于表血缘快速设置节点依赖该方式DataWorks将自动解析节点代码中的表血缘,通过血缘关系配置调度依赖。
通过手动在节点调度配置添加上游节点依赖通常,当通过自动解析生成的节点调度依赖配置与实际应用不符时,您可使用该方式修改调度依赖。
基于上述原理,同周期依赖可实现跨业务流程设置节点依赖关系同地域跨工作空间设置节点依赖关系。详情请参见场景3:如何配置跨业务流程、跨工作空间的调度依赖

依赖上一周期

即下游节点依赖上游节点上一周期实例产出的表数据。若当前节点需依赖某节点上一周期所产出的表数据时,可对该节点设置跨周期依赖。跨周期依赖的配置方式如下。
配置方式说明
依赖上一周期本节点若本节点本次实例运行,取决于本节点上一周期业务数据的产出情况,可使用该方式。
依赖上一周期一级子节点若本节点本次实例的运行,依赖于该节点的下游节点在上一周期对本节点上一周期结果表(即本节点输出表)数据的清洗结果是否成功,可使用该方式。
依赖上一周期其他节点若本节点本次实例运行,在业务逻辑上需要依赖其它业务的数据,但本节点中不包含涉及其他业务数据的相关操作,可使用该方式。

确认依赖关系配置是否符合预期

调度依赖配置后,您可通过以下方式确认依赖关系是否正常。
确认方式说明
配置时:预览依赖用于提前预览节点当前配置的调度依赖是否符合预期。

DataWorks支持分钟小时等类型的调度任务互相依赖,调度类型不同,任务执行的周期数不同。

任务各周期是通过实例的方式执行,当上下游调度依赖的类型不同时,其实例依赖情况不同。例如,天任务依赖小时任务,小时任务依赖分钟任务,或存在跨周期依赖的场景,可使用此功能保障任务满足预期运行时间,避免由于依赖关系不符合预期导致任务延迟。复杂依赖场景调度配置,详情请参见必读:复杂依赖场景调度配置原则与示例

提交时:代码解析结果对比用于提交节点时,确认当前版本节点依赖变更是否符合预期,及变更对生产的影响。

开启自动解析时,为保障生产数据正常产出,您需要在提交节点时,对节点调度变更的相关操作进行二次确认。可使用该功能保障依赖变更不影响生产任务数据产出。

发布后:查看周期任务用于节点发布后,在运维中心确认生产调度任务的依赖是否符合预期。
  • 确认生产任务的调度依赖

    标准模式工作空间下,节点依赖关系在开发环境和生产环境依赖可以不一致。生产环境节点的调度依赖需在数据开发界面配置,并且完成发布后才会生效。

    节点发布后,您可进入运维中心的周期任务界面,展开当前任务上下游,查看调度依赖情况。
    重要 周期任务界面均展示节点在生产环境的最新状态,但周期实例是否存在新加或删除的依赖,与所选实例生成方式有关
  • 确认生产任务的数据情况
    调度依赖确认无误后,您还需确认上下游节点的分区数据读取与写入情况(即调度参数配置是否正确)。避免上游节点产出的数据非当前节点所依赖的数据,导致下游节点出现数据质量问题。
    说明 若任务发布流程中存在流程管控,建议在任务发布后,进入生产运维中心的周期任务界面,查看任务调度依赖及相关属性,若发现任务不符合预期,请确认任务的发布流程是否被阻塞。详情请参见发布任务

注意事项

配置调度依赖的注意事项如下:
  • 节点唯一性相关
    • 开发环境与生产环境节点形态不同但节点唯一。

      同一节点在开发环境和生产环境中的调度依赖配置可以不同,即同一个节点在开发环境和生产环境可以拥有两种不同的形态,但节点唯一。

    • 下线节点前需在开发环境与生产环境同时移除下游依赖。

      由于节点唯一性,为保障下游任务取数及运行无误,DataWorks在下线上游任务前,需先在下游节点调度移除,然后重新配置下游节点需要依赖的上游节点,并提交发布。确保开发环境及生产环境该依赖都被移除后,才可下线上游任务。

  • 与实例生成方式相关
    • 新建节点时,请确保上下游节点的实例生成方式相同。

      避免因为实例生成方式不同,上游节点当天生成实例,下游节点隔天生成实例,导致下游实例变为孤立节点

    • 变更已存在节点的调度周期,且选择发布后及时生成实例

      修改节点的调度依赖时,已生成的实例不会自动删除,节点发布后当天周期实例的依赖情况会比较奇怪,详情请参见实时转实例对当天周期实例依赖关系的影响

更多调度依赖的常见问题,请参见依赖关系