DataWorks的调度依赖是指周期调度节点间的上下游依赖关系。通过节点的依赖关系有序调度运行上下游节点,即当上游节点运行成功后,下游节点才会启动运行,保障适时的产出有效业务数据。本文为您介绍调度依赖的配置指引,避免因调度依赖配置有误导致数据异常,配置前建议先了解此内容。
背景信息
DataWorks上任务的调度依赖是指调度场景下节点间的上下游依赖关系。在DataWorks中,上游节点任务运行完成且运行成功,下游节点任务才会开始运行。配置调度依赖后,可保障调度任务在运行时能获取到正确的数据(即当前节点依赖的上游节点成功运行后,DataWorks通过节点的运行状态识别到上游表的最新数据已产生,下游节点再去取数),避免下游节点取数据时,上游表数据还未正常产出,导致下游节点取数出现问题。
注意事项
节点依赖关系配置后,默认在任务调度运行时,下游节点运行条件之一为其依赖的上游节点均已执行成功,否则当前任务取数会存在质量问题。
任务实际运行时间除了取决于任务本身的定时时间(即任务在调度场景下的预期执行时间)外,还取决于上游任务的完成时间(即下游任务实际执行时间还取决于上游任务的定时时间)。若上游任务未完成运行,即便下游任务的定时时间早于上游任务,下游任务也不会运行。任务运行条件,详情请参见任务运行诊断。
调度依赖配置指引
DataWorks任务依赖最终是为了保障下游取数无误,实际是上下游表数据的血缘依赖。您可根据业务需求,选择是否需要基于表的血缘关系配置调度依赖。节点的调度依赖配置流程如下。
方式一:自定义依赖关系
若DataWorks上任务间不存在强血缘依赖(例如,不强依赖上游某个分区数据,仅取上游当前时间点最大分区数据),或依赖的数据非周期调度节点产出的表数据(例如,本地上传的表数据),则您可自定义节点的依赖关系。自定义依赖配置具体如下:
依赖工作空间根节点
例如,同步任务中的上游数据来源于其他业务数据库,SQL类型任务对实时同步任务产出的表数据进行加工等场景,您可直接选择挂载依赖至工作空间根节点下。
依赖虚拟节点
当工作空间中业务流程较多或较复杂时,您可通过虚拟节点管理该业务流程,将需要统一管控的节点挂载依赖至某虚拟节点,使工作空间下数据流转路径更加清晰。例如,控制业务流程整体调度时间、控制业务流程整体调度与冻结(即不调度)。
方式二:基于血缘配置依赖关系
由于节点依赖关系配置后,默认节点的上下游产出表存在强依赖关系(即下游表数据的产出需要依赖上游产出的表数据),因此,任务在配置调度依赖时,需确认是否存在强血缘依赖,即确认当前任务是否会因为上游数据未产出而导致当前任务取数出现问题。若下游节点中表数据的产出,需依赖上游节点产出的表数据,则认为上下游节点的表存在强血缘依赖关系。
序号 | 目标 | 描述 |
①② | 确认上下游表是否存在强血缘关系。 | 为避免当前任务执行时间不符合预期,您可先评估表之间是否存在强依赖血缘关系,确认是否需要基于血缘关系配置调度依赖。 |
③ | 确认当前场景是否为周期调度任务产出的表数据。 | 不在DataWorks周期调度产出的表数据,DataWorks无法通过任务运行情况监控数据产出,因此,部分表不支持配置调度依赖。 |
④⑤⑥ | 基于血缘确认调度依赖的配置方式并配置调度依赖。 | 根据需要依赖上游昨天还是今天的数据、小时分钟任务是否要依赖自己上一个小时或分钟实例,来选择依赖上游同周期还是上一周期。 |
⑦⑧⑨ | 预览依赖关系。 | 依赖关系配置完成后,可通过预览依赖、对比代码解析结果,查看周期任务确认配置时,发布前,发布生产后任务依赖关系是否符合预期。 |
基于血缘配置调度依赖
DataWorks中,表血缘关系体现为产出表数据的节点间的依赖关系。在确认存在强血缘依赖后,您需要判断需要依赖上游昨天还是今天的数据、小时分钟任务是否要依赖自己上一个小时或分钟实例,来选择依赖上游同周期还是上一周期。
DataWorks支持多种类型任务互相依赖,并且会根据调度类型及周期数生成相应的实例上下游节点的周期数不同,各周期的依赖关系不同。为避免配置的依赖不符合预期,建议使用该功能提前预览上下游调度周期数与定时时间不一致场景下,其实例依赖情况。详情请参见:必读:复杂依赖场景调度配置原则与示例。
调度依赖场景选择与配置
在任务实际调度时,产出数据的代码中会使用调度参数来指定依赖哪个周期实例的数据,具体确认逻辑如下。
调度参数会根据任务调度的业务日期、定时时间及参数的取值格式自动替换为具体的值,实现在任务调度时间内参数的动态替换,进而实现任务查询与产出的表分区变更。
基于表血缘选择调度依赖方式的步骤如下:
确认表的血缘关系
为保障任务调度产出的表数据符合预期,您需明确上下游表当天产出的业务数据,确保下游表当天获取的数据为上游表当天的产出数据。
若为小时、分钟周期调度任务,则需明确每个小时、分钟周期实例产出的表分区数据。
若无法看到上游调度参数配置(例如,依赖其他空间下的表场景),如何确认表血缘,可参见确认表血缘。
基于血缘选择调度依赖的配置方式
明确表血缘后,您可根据血缘关系确定调度依赖的配置方式(即同周期依赖还是依赖上一周期)。
调度依赖配置方式
血缘关系
下游依赖上游今天产出的表数据。
下游依赖上游昨天产出的表数据。
小时、分钟任务特殊依赖场景:
依赖自己上一个小时或分钟的周期实例数据,可设置跨周期依赖(即依赖上一周期:本节点(自依赖))。
小时任务依赖小时任务,如果上下游的定时时间完全相同,设置跨周期依赖可以实现下游2点的实例依赖上游1点的实例。分钟任务依赖分钟任务,原理相同。
不支持配置依赖的场景
DataWorks的调度依赖主要用于保障周期调度节点定时更新的表数据,确保下游节点取数无误。因此,不在DataWorks上通过调度节点更新的表,DataWorks无法直接监控。非DataWorks周期性调度产出数据的表包括但不限于以下几类:
实时同步产出的表
从本地上传到DataWorks的表
维表
手动任务产出的表
非DataWorks上调度节点产出的周期性变更的表
非DataWorks周期性调度产出数据的表,可自定义依赖关系,关于自定义依赖关系,详情请参见调度依赖配置指引。
调度依赖关系确认
调度依赖配置后,您可通过以下方式确认依赖关系是否正常。
确认方式 | 说明 |
用于提前预览节点当前配置的调度依赖是否符合预期。 DataWorks支持分钟、小时、日、周、月、年等类型的调度任务互相依赖,调度类型不同,任务执行的周期数不同。 任务各周期是通过实例的方式执行,当上下游调度依赖的类型不同时,其实例依赖情况不同。例如,天任务依赖小时任务,小时任务依赖分钟任务,或存在跨周期依赖的场景,可使用此功能保障任务满足预期运行时间,避免由于依赖关系不符合预期导致任务延迟。复杂依赖场景调度配置,详情请参见必读:复杂依赖场景调度配置原则与示例。 | |
用于提交节点时,确认当前版本节点依赖变更是否符合预期,及变更对生产的影响。 开启自动解析时,为保障生产数据正常产出,您需要在提交节点时,对节点调度变更的相关操作进行二次确认。可使用该功能保障依赖变更不影响生产任务数据产出。 | |
用于节点发布后,在运维中心确认生产调度任务的依赖是否符合预期。
|
常见问题
以下为典型场景说明,更多调度依赖的常见问题,请参见依赖关系。
节点唯一性相关
开发环境与生产环境节点形态不同但节点唯一:同一节点在开发环境和生产环境中的调度依赖配置可以不同,即同一个节点在开发环境和生产环境可以拥有两种不同的形态,但节点唯一。
下线节点前需在开发环境与生产环境同时移除下游依赖:由于节点唯一性,为保障下游任务取数及运行无误,DataWorks在下线上游任务前,需先在下游节点调度移除,然后重新配置下游节点需要依赖的上游节点,并提交发布。确保开发环境及生产环境该依赖都被移除后,才可下线上游任务。
与实例生成方式相关
新建节点时,请确保上下游节点的实例生成方式相同,避免因为实例生成方式不同,上游节点当天生成实例,下游节点隔天生成实例,导致下游实例变为场景:节点孤立。
变更已存在节点的调度周期,并且选择发布后及时生成实例时,修改节点的调度依赖时,已生成的实例不会自动删除,节点发布后当天周期实例的依赖情况会比较奇怪,详情请参见实时转实例对当天周期实例依赖关系的影响。