同周期依赖指本节点等待当前周期的上游节点实例执行成功后再运行,适用于消费上游当天( 当前周期)产出数据的场景。DataWorks提供多种同周期依赖配置方式,并支持依赖预览功能,您可及时查看并调整有误依赖,保障任务调度符合预期。
配置原理
调度依赖通过节点输出和节点输入的匹配关系建立:将上游节点的输出名称作为下游节点的输入,即形成依赖关系。配置完成后,上游节点运行成功,下游节点才会启动运行。配置前,建议根据节点读写的表血缘确认依赖对象和依赖类型,请参见调度依赖配置指引。
节点输出
节点输出即本节点输出名称,是其他节点与本节点建立依赖关系的媒介(标识符),而不是节点实际产出的数据。其他节点通过本节点的输出名称找到本节点,从而将本节点设置为上游依赖。
DataWorks会为每个节点自动生成两个输出名:
-
projectName.randomNumber_out:全局唯一,且不支持修改和删除。
-
projectName.nodeName:带节点名的输出,修改。节点名称变更后,此输出名不变。
同时,DataWorks也支持通过手动添加或者从代码解析输入输出,其中不同的节点类型对代码解析的支持情况可参考:代码解析结果对比。
节点输入
节点输入即本节点依赖的上游节点,可通过指定节点的输出名称(推荐)、节点名称或者节点ID指定。
其中节点ID需要上游节点提交至生产环境才会生成。
配置原则
为提升任务开发效率,建议您在实际开发中使用代码解析功能快速为节点设置依赖关系。基于代码解析进行实际开发时,请遵循以下原则:
-
节点创建:建议节点名称与节点产出表名称一致。
-
代码开发:避免多个节点写入数据至同一张表。
-
依赖配置:建议将节点产出表配置为节点的输出。
配置入口和方式
进入数据开发节点的编辑页面,单击右侧导航栏的调度配置,在调度依赖区域配置节点的依赖关系。
-
依赖的上游节点:定义当前任务需要依赖哪些上游任务。
-
本节点输出名称:定义其他任务可通过本节点的哪些输出挂载依赖关系。
-
在代码编辑时,默认基于表血缘设置依赖关系,并在提交时自动检测依赖是否符合数据血缘。您可选择是否启用提交前自动解析功能,详情请参见调度设置。
-
若本节点需依赖上游昨天产出的数据,或小时/分钟任务依赖自己上一周期实例,请设置配置依赖上一周期(跨周期依赖)。
-
若本节点与上游节点的调度周期频率不一致,如天任务依赖小时任务,或者依赖不同频率的小时任务等复杂场景,可参见:必读:复杂依赖场景调度配置原则与示例。
您可通过如下三种方式配置,无论哪种方式,其原理不变。
通过代码解析表血缘设置节点依赖
代码解析是通过解析节点代码中的表血缘,自动设置节点的输出名称和依赖的上游节点。解析后,节点产出的表将被自动添加为projectname.tablename格式的节点输出;节点查询的表将被自动添加为节点输入。
例如,SELECT一张表,该表将被自动解析为本节点依赖的上游;INSERT一张表,该表将被自动解析为本节点的输出。各类型节点自动解析支持的关键字,详情请参见各类型节点自动解析场景。
-
配置依赖
代码解析支持手动从代码中解析输入输出和提交前自动解析两种方式。两者原理一致,提交前自动解析会在代码提交时自动解析输入输出,并提醒您挂载依赖。
例如:ODPS节点mc2需依赖节点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
mc1
-
测试空间
lingyi01_testcloud_com
日
代码解析
暂无数据
删除
同时,解析出本节点的输出为
ads_user_info_1d表,对应解析情况如下:输出名
输出表名
下游节点名称
责任人
添加方式
下游节点影响基线
操作
old_ide.505487297_out
-
-
-
系统默认添加
-
删除
old_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}不存在,不能提交本节点,请确保拥有该输出名的父节点已被提交。
-
通过调度配置界面手动添加上游节点依赖
在调度配置->调度依赖->依赖的上游节点配置界面,通过输入某节点的节点输出/节点名称/节点ID,手动添加依赖的上游节点。节点名称容易出现重复,推荐使用节点输出进行依赖挂载。
通过业务流程面板拉线设置节点依赖
在业务流程的DAG面板使用拉线方式设置依赖关系时,DataWorks将自动为下游节点添加上游节点_out格式的输出,形成节点依赖。
当业务流程面板中的依赖连线删除后,节点调度配置中也会同步删除该依赖关系。
删除或变更节点输出的影响
当节点产出的表数据变更导致节点输出的变更,或直接手动修改节点输出时,请注意以下内容:
-
删除节点输出对本节点产出的表数据无直接影响。
-
若节点输出已存在下游依赖,此时变更或删除可能会对下游任务产生严重影响。
-
节点产出表删除:当自动解析的节点输出,由于节点产出表变更导致节点输出变更时,可能会导致下游变为孤立节点不被调度,或由于下游任务缺少数据依赖导致下游被数据污染。
-
节点产出表变更:若当前节点产出的表需转移至其他节点,请参考删除或变更节点输出的影响进行操作。
若某节点输出存在下游依赖,删除该输出名称时,建议提前与下游任务的责任人进行沟通,告知其当前任务的某个输出要删除,请及时调整下游任务的依赖关系,避免下游任务变为孤立任务。
-
后续:确认依赖是否符合预期
配置完成后,为保障任务调度符合预期,您可通过以下操作验证配置是否正确:
-
预览依赖:避免依赖关系不符合预期导致任务调度延迟。
-
提交检查:提交节点时确认依赖变更是否符合预期。
-
周期任务依赖确认:节点发布后,需在运维中心确认生产调度任务的依赖是否符合预期。周期任务为生产环境该任务的最新状态,同时,周期实例的实例依赖关系与实例生成方式有关。
更多详情请参见调度依赖关系确认。
常见问题
更多常见问题,请参见调度依赖。
最佳实践
跨工作空间、同工作空间跨业务流程设置节点依赖,详情请参见场景3:如何配置跨业务流程、跨工作空间的调度依赖。