周期依赖指本节点等待当前周期的上游节点实例执行成功后再运行,适用于消费上游当天( 当前周期)产出数据的场景。DataWorks提供多种同周期依赖配置方式,并支持依赖预览功能,您可及时查看并调整有误依赖,保障任务调度符合预期。
配置原理
调度依赖通过节点输出和节点输入的匹配关系建立:将上游节点的输出名称作为下游节点的输入,即形成依赖关系。配置完成后,上游节点运行成功,下游节点才会启动运行。配置前,建议根据节点读写的表血缘确认依赖对象和依赖类型,请参见调度依赖配置指引。
节点输出
节点输出即本节点输出名称,是其他节点与本节点建立依赖关系的媒介(标识符),而不是节点实际产出的数据。其他节点通过本节点的输出名称找到本节点,从而将本节点设置为上游依赖。
DataWorks会为每个节点自动生成两个输出名:
随机ID:全局唯一,且不支持修改和删除。
projectName.nodeName:带节点名的输出,可修改。节点名称变更后,此输出名不会自动更新。
同时,DataWorks也支持通过手动添加或者从代码解析输入输出,其中不同的节点类型对代码解析的支持情况可参考:代码解析结果对比。
节点输入
节点输入即本节点依赖的上游节点,可通过指定节点的输出名称(推荐)、节点名称或者节点ID指定。
其中节点ID需要上游节点提交至生产环境才会生成。
配置原则
为提升任务开发效率,建议您在实际开发中使用代码解析功能快速为节点设置依赖关系。基于代码解析进行实际开发时,请遵循以下原则:
节点创建:建议节点名称与节点产出表名称一致。
代码开发:避免多个节点写入数据至同一张表。
依赖配置:建议将节点产出表配置为节点的输出。
步骤一: 配置入口
进入数据开发节点的编辑页面,单击右侧导航栏的调度配置,在调度依赖区域配置节点的依赖关系。
依赖的上游节点:定义当前任务需要依赖哪些上游任务。
本节点输出名称:定义其他任务可通过本节点的哪些输出挂载依赖关系。
步骤二: 添加依赖节点
在代码编辑时,默认基于表血缘设置依赖关系,并在提交时自动检测依赖是否符合数据血缘。您可选择是否启用提交前自动解析功能,详情请参见调度设置。
若本节点需依赖上游昨天产出的数据,或小时/分钟任务依赖自己上一周期实例,可通过配置依赖上一周期(跨周期依赖)快捷指定,也可以使用指定区间或者指定集合进行更精确灵活的配置。
若本节点与上游节点的调度周期频率不一致,如天任务依赖小时任务,或者依赖不同频率的小时任务等复杂场景,可参见:必读:复杂依赖场景调度配置原则与示例。
您可通过如下三种方式配置,无论哪种方式,其原理不变。
1. 通过代码解析表血缘设置节点依赖
代码解析是通过解析节点代码中的表血缘,自动设置节点的输出名称和依赖的上游节点。解析后,节点产出的表将被自动添加为projectname.tablename格式的节点输出;节点查询的表将被自动添加为节点输入。
例如,SELECT一张表,该表将被自动解析为本节点依赖的上游;INSERT一张表,该表将被自动解析为本节点的输出。各类型节点自动解析支持的关键字,详情请参见各类型节点自动解析场景。
配置依赖
代码解析支持手动从代码中解析输入输出和提交前自动解析两种方式。两者原理一致,提交前自动解析会在代码提交时自动解析输入输出,并提醒您挂载依赖。
例如:当前在工作空间yunwan_lingyi下有一个MaxCompute节点mc2,此节点需依赖MaxCompute节点mc1的输出表
dws_user_info_all_di,节点mc2的代码内容如下:INSERT OVERWRITE TABLE ads_user_info_1d PARTITION (dt='${workflow.var}') SELECT uid , MAX(region) , MAX(device) , COUNT(0) AS pv , MAX(gender) , MAX(age_range) , MAX(zodiac) FROM dws_user_info_all_di WHERE dt = '${workflow.var}' GROUP BY uid;单击从代码中解析输入输出后,解析出本节点的输入为
dws_user_info_all_di表,并且自动匹配到上游节点的输出表名和上游节点名称:上游节点输出名
上游节点输出表名
上游节点名称
节点ID
工作空间
责任人
调度周期
添加方式
最近运行情况
操作
yunwan_lingyi.dws_user_info_all_di
yunwan_lingyi.dws_user_info_all_di
mc1
-
测试空间
lingyi01_testcloud_com
日
代码解析
暂无数据
删除
同时,解析出本节点的输出为
ads_user_info_1d表,对应解析情况如下:输出名
输出表名
下游节点名称
责任人
添加方式
下游节点影响基线
操作
ide.505487297_out
-
-
-
系统默认添加
-
删除
ide.mc2
-
-
-
手动添加
-
删除
yunwan_lingyi.ads_user_info_1d
yunwan_lingyi.ads_user_info_1d
-
-
代码解析
-
删除
至此,节点mc2完成与节点mc1的依赖配置。
修改代码解析的依赖关系
当代码解析的依赖关系不符合预期,或存在不支持调度依赖的场景(非周期性调度产出数据的表)需手动删除依赖关系时,您可参考以下内容修改自动解析的依赖关系。
操作
描述
手动删除解析结果
在依赖的上游节点列表中中删除不符合预期的输入,执行删除操作,并重新解析。删除后,自动添加相应注释至代码中,防止下次解析再次添加:
--@exclude_input=删除输入 --@exclude_output=删除输出手动添加输入输出
在代码编辑框中右击表名,选择添加输入或者添加输出,添加后,自动添加相应注释至代码中
--@extra_output=添加输出 --@extra_input=添加输入或者也可以参考通过调度配置界面手动添加上游节点依赖或者通过业务流程面板拉线设置节点依赖的方式来添加依赖。
重要DataWorks不支持直接删除已存在下游依赖的节点输出,直接删除将导致下游任务执行或取数异常。建议您先调整下游业务,在下游节点移除该上游依赖,再在上游节点删除该节点输出。
不纳入自动解析的场景
DataWorks中的临时表(即工作空间表管理中定义的固定格式的表。例如,
t_开头的表),不会被自动解析为本节点的输出或依赖的上游节点。自动解析使用注意事项
使用自动解析设置依赖关系时,需保证节点输出在当前地域下唯一。在DataWorks开发场景下,使用自动解析需注意以下问题:
节点创建:节点默认自带一个同名的节点输出,若同一个工作空间存在同名节点,需手动修改其中一个节点的节点输出。
代码开发:自动解析会将节点的产出表作为节点输出。若同一个工作空间中,两个调度节点往同一张表插入数据,自动解析场景下将导致其中一个节点产生报错,详情请参见多个节点往同一张表写数据,自动解析报错节点输出名相同。
依赖配置 :对于使用SQL任务加工离线同步任务的产出表的场景,为了方便SQL任务对离线同步任务产出表进行加工时,可通过血缘自动解析快速依赖离线同步任务,您需手动将离线同步节点的产出表配置为节点输出,或者将离线同步任务产出表名作为离线同步任务节点名(平台会自动创建与节点名相同的节点输出),否则下游SQL节点提交时可能报错当前节点依赖的父节点输出名${projectname.tablename}不存在,不能提交本节点,请确保拥有该输出名的父节点已被提交。
2. 通过调度配置界面手动添加上游节点依赖
在调度配置->调度依赖->同周期依赖配置界面,通过输入某节点的节点输出/节点名称/节点ID,手动添加依赖的上游节点。节点名称容易出现重复,推荐使用节点输出进行依赖挂载。
3. 通过业务流程面板拉线设置节点依赖
在业务流程的DAG面板使用拉线方式设置依赖关系时,DataWorks将自动为下游节点添加上游节点_out格式的输出,形成节点依赖。
当业务流程面板中的依赖连线删除后,节点调度配置中也会同步删除该依赖关系。
步骤三:设置依赖类型
在建立了基础的上下游依赖关系后,您还需要定义依赖的挂载方式,即下游实例具体如何依赖上游实例。DataWorks提供了由浅入深的三种同周期依赖挂载方式。
您可以在调度配置->调度依赖->同周期依赖列表中,为每个上游依赖项的依赖类型列进行选择。
1. 就近依赖(标准同周期依赖)
含义:这是最常用、最基础的同周期依赖方式。它遵循“就近挂载”原则,下游实例会自动关联并等待上游同业务周期内,最新产出的一个实例,无需额外配置(有少量例外情况,可参见复杂依赖场景调度配置原则与示例)。
适用场景:
标准的日/周/月度 ETL 流程。
上下游任务为一对一的依赖关系,例如一个日任务依赖另一个日任务。
2. 指定区间(依赖一个连续的时间窗口)
当简单的“一对一”依赖无法满足需求时,例如下游需要聚合上游一个时间段内的数据,您可以使用指定区间进行更灵活的配置。
此功能需在节点的调度设置中,先启用调度依赖高级配置开关。
配置方式:
选择依赖节点后,单击操作列的配置,选择依赖类型为指定区间。
设置以本节点自身定时时间为基准的左右偏移量。允许的最偏移区间最大范围是-1440和1440,单位:分钟。
含义:允许下游任务依赖一个连续时间区间内的所有上游实例。这个区间是一个相对于下游任务自身定时运行时间而动态计算的“滑动窗口”,只允许选择运行当天和前一天限定区间范围内的实例。
核心逻辑示例:
一个小时任务下游,依赖另一个小时任务上游,并配置区间为[-2h, +2h]。当下游 12:00 的实例运行时,它会依赖上游 10:00 到 14:00 这个区间内的所有实例。
当下游 13:00 的实例运行时,依赖窗口则会自动“滑动”到 11:00 到 15:00。
适用场景:
跨时区数据汇总:中国(UTC+8)的天任务,需汇总印度(UTC+5:30)全天24个小时任务的数据。可配置区间为
[-3h, 21h]来精确覆盖印度当地业务日对应的物理时间窗口。跨自然日窗口聚合:一个凌晨执行的天任务,需要加工的数据范围是从昨天下午到今天凌晨。例如,可配置区间
[-12h, 4h]来依赖上游从昨天12:00到今天04:00的小时实例。
3. 指定集合(依赖一组离散的固定实例)
当您的依赖逻辑与上游某些特定的、离散的产出实例相关时,“指定集合”是最佳选择。
此功能需在节点的调度设置中,先启用调度依赖高级配置开关。
配置方式:
选择依赖节点后,单击操作列的配置,选择依赖类型为指定集合。
设置以本节点自身定时时间为基准的左右偏移量。允许的最偏移区间范围是-1440和1440,单位:分钟。
含义:允许下游任务依赖一个固定的、离散的上游实例集合。与“指定区间”的滑动窗口不同,这个实例集合是静态的,对于所有下游实例都完全相同。
核心逻辑示例:
下游任务配置依赖上游的{02:00, 06:00, 10:00}这三个实例。无论是下游的 08:00 实例,还是 12:00 的实例,都会等待这三个特定实例全部成功后才运行。适用场景:
依赖关键里程碑:下游任务的启动条件是上游在一天中的几个关键时间点(如早、中、晚快照)的数据准备就绪。
删除或变更节点输出的影响
当节点产出的表数据变更导致节点输出的变更,或直接手动修改节点输出时,请注意以下内容:
删除节点输出对本节点产出的表数据无直接影响。
若节点输出已存在下游依赖,此时变更或删除可能会对下游任务产生严重影响。
节点产出表删除:当自动解析的节点输出,由于节点产出表变更导致节点输出变更时,可能会导致下游变为孤立节点不被调度,或由于下游任务缺少数据依赖导致下游被数据污染。
节点产出表变更:若当前节点产出的表需转移至其他节点,请参考删除或变更节点输出的影响进行操作。
若某节点输出存在下游依赖,删除该输出名称时,建议提前与下游任务的责任人进行沟通,告知其当前任务的某个输出要删除,请及时调整下游任务的依赖关系,避免下游任务变为孤立任务。
后续:确认依赖是否符合预期
配置完成后,为保障任务调度符合预期,您可通过以下操作验证配置是否正确:
预览依赖:避免依赖关系不符合预期导致任务调度延迟。
提交检查:提交节点时确认依赖变更是否符合预期。
周期任务依赖确认:节点发布后,需在运维中心确认生产调度任务的依赖是否符合预期。周期任务为生产环境该任务的最新状态,同时,周期实例的实例依赖关系与实例生成方式有关。
更多详情请参见调度依赖关系确认。
常见问题
Q:通过指定区间或者指定集合方式设置依赖关系后,上游修改调度时间,导致下游节点无可依赖实例,下游节点到运行时间后会发生什么?
A:下游节点的实例到运行时间后,会因上游实例不存在而不运行,在运维中心的状态为未运行。
Q:如果当前节点要配置跨周期依赖,且依赖方式为一级子节点或者其他节点,选中的节点刚好对本节点为指定区间或指定集合依赖,依赖是否生效?
A:这种配置方式可能会形成环路依赖,因此,即使配置了也不生效。
Q:当前有节点A和节点B,两者均为天调度。能否设置节点A依赖节点B的同周期实例(当日),节点B通过指定区间依赖节点A的上一天实例?
A:不能。当前区间依赖不支持跨天成环。
更多常见问题,请参见调度依赖。
最佳实践
跨工作空间、同工作空间跨业务流程设置节点依赖,详情请参见场景3:如何配置跨业务流程、跨工作空间的调度依赖。