调度依赖关系是您构建有序业务流程的根本,只有正确构建任务依赖关系,才能保障业务数据有效、适时地产出。本文为您介绍调度依赖的配置指导。
背景信息
- 依赖的上游节点:定义了本节点的上游节点,在上游节点运行成功后本节点才具备运行条件。
- 本节点的输出:作为其他节点与本节点建立依赖关系的媒介,您可以通过输出名找到目标节点并将其设置为依赖的上游节点。

- 在业务流程画布中,使用鼠标拖拽的方式在节点之间进行连线。详情请参见调度依赖配置指导:鼠标拖拽。
- 在调度配置面板中,搜索节点名称或者表名称,手动将某个节点添加为当前节点的上游依赖。您也可以借助代码解析功能,并基于系统的解析结果进行修改。详情请参见调度依赖配置指导:手动配置。
- 在调度配置面板中,开启自动解析功能,提交任务时系统会根据代码解析出本节点的上游依赖,并自动完成添加。详情请参见调度依赖配置指导:自动解析。
- 在调度配置面板中,使用自动推荐功能。系统会根据表的血缘信息推荐上游依赖节点。说明 表的血缘信息更新时间为
t+1
天,可能存在推荐上游节点滞后的情况。
常见的典型配置可参见典型业务场景配置指导。
调度配置完成后,提交节点时,DataWorks会检查节点的调度依赖与节点代码中的数据血缘关系是否一致,详情可参见调度配置完成后处理。
通用配置原则
- 本节点的输出指当前节点的输出,输出节点名称是全局唯一的,在整个阿里云账号内不允许重复。
创建节点后,DataWorks自动为各节点生成两个本节点的输出的配置信息,其中:
- 一个本节点的输出名称的后缀为*******_out
- 一个本节点的输出名称为
projectname.nodename
- 依赖的上游节点指当前节点依赖的上游节点,配置后,DataWorks会通过配置的上游节点输出名或输出表名进行找到依赖的上游节点。
如果您通过手动搜索上游输出名添加,则搜索器会根据已提交至调度系统中的节点的输出名来进行搜索。
搜索支持模糊匹配,即输入关键词,即可显示所有包含关键词的节点。当节点显示对应节点目前被冻结时,请勿使用该节点作为依赖的上游节点,以免影响任务的正常运行。
- 一张表的数据只由一个节点产出,且节点的产出表需配置为本节点的输出。
说明
- SQL任务会通过自动解析,将产出表作为本节点输出,无需手动配置。
- 离线同步任务需要手动配置,将产出表添加为本节点输出,格式为projectname.tablename。以便下游节点对该表进行数据清洗时,可以通过自动解析快速设置同步任务节点依赖关系。
- 上游节点的输出作为下游节点的输入,形成节点间的依赖关系。
调度依赖配置指导:自动解析
- 应用场景
DataWorks支持根据任务节点中的SQL命令,自动解析出表数据的血缘关系,以表数据的血缘关系为基座,为节点自动添加本节点的输出或依赖的上游节点,自动解析高效便捷,适用于绝大部分场景。说明 离线同步任务暂不支持自动解析设置节点依赖关系。当同步任务产出一张表时,您需要手动将添加为节点的输出,格式为projectname.tablename。以便下游节点对该表进行数据清洗时,可以通过自动解析快速设置节点依赖关系。
- 实现原理
下图为自动解析依赖关系的原理。如果出现的多个INSERT、SELECT,则会自动解析出多个输出、输入名称。
- SELECT一张表,该表将自动解析为本节点依赖的上游。
- INSERT一张表,该表将自动解析为本节点的输出。
- 配置方法
自动解析通过SQL代码命令自动识别配置,无需您手动配置。自动配置的原则如下表所示。
节点类型 代码命令 自动解析 调度依赖配置规则 ODPS节点 - CREATE
- INSERT
当节点代码中出现此类输出命令时,会自动为节点添加一条本节点输出配置内容。 为节点自动添加的本节点输出命名规则为:odps_project_name.table_name。 其中:- odps_project_name:为当前节点所在的DataWorks项目名称。
- table_name:为输出命令后的表名称。
SELECT 当节点代码中出现此命令时,会自动为节点添加一条依赖的上游节点配置内容。 为节点自动添加的依赖的上游节点命名规则为:project_name.table_name。
其中:- project_name:SELECT语句中,from命令后的表所在节点的项目名称。
- table_name:SELECT语句中from命令后的表名称。
非ODPS的SQL节点 - ALTER
- CREATE
- UPDATE
- INSERT
当节点代码中出现此类输出命令时,会自动为节点添加一条本节点输出配置内容。 各类型节点自动添加的本节点输出命名规则为: - EMR:workspace_name.db_name.table_name
- ADBPG:workspace_name.db_name.schema_name.table_name
- ADBMySQL:workspace_name.db_name.schema_name.table_name
- Hologres:workspace_name.db_name.schema_name.table_name
其中:- workspace_name:为当前节点所在的DataWorks项目名称。
- db_name:为当前节点所在的数据库名称。
- schema_name:为当前节点的schema名称。
- table_name:为输出命令后的表名称。
SELECT 当节点代码中出现此命令时,会自动为节点添加一条依赖的上游节点配置内容。 为节点自动添加的依赖的上游节点命名规则为:project_name.table_name。
其中:- project_name:SELECT语句中,from命令后的表所在节点的项目名称。
- table_name:SELECT语句中from命令后的表名称。
离线同步节点 离线同步节点不支持自动解析,需要手动添加节点的调度依赖配置。 说明 当同步任务产出一张表时,需要手动将添加为节点的输出,格式为projectname.tablename。以便下游节点对该表进行数据清洗时,可以通过自动解析快速设置节点依赖关系。 - 注意事项
- 代码开发要求
自动解析完全依据您的任务节点中代码自动识别,因此您在进行数据开发时,建议严格遵循DataWorks的代码开发要求和节点创建要求:
- 代码开发要求:一张表数据由一个节点产出,一个节点只产出一张表。
- 节点创建要求:建议节点名称与产出表的表名称保持一致。
- 调度配置要求:节点的产出表需配置为本节点的输出。
- 不支持自动解析的场景
- 离线节点、AnalyticDB for PostgreSQL节点、AnalyticDB for MySQL节点、EMR节点不支持通过自动解析添加节点的调度依赖,这些节点的产出表需要手动添加为本节点的输出。
- SQL代码中的临时表(例如在工作空间配置中指定t_开头的表为临时表)不支持自动解析,不会被自动解析为本节点的输出或依赖的上游节点。
- 不规范使用的处理逻辑
- 如果SQL语句中的一个表名既是产出表又是被引用表(被依赖表),则解析时只解析为产出表。
- 如果SQL语句中的一个表名被多次引用或被多次产出,则解析时只解析一个调度依赖关系。
- 提交节点时,出现调度依赖配置不一致情况
开启自动解析后,为保障节点数据产出无误,提交节点时,系统将基于代码中表的血缘关系自动解析当前节点的输入与输出。您也可以根据实际需求修改节点的输入、输出结果。
如果提交节点时,当前版本的调度依赖(自动解析结果+您在使用新的解析结果,基于当前节点最新版本的调度依赖继续提交该节点,节点提交后,最新的解析结果将自动添加至 区域。区域自行修改的输入输出结果)与开发环境或生产环境节点的调度依赖不一致时,将出现输入输出变更提示(当前最新版本与上个版本比较,新增或删除了哪些输入或输出)。您可以选择是否说明 节点提交时,若发现节点当前调度依赖解析与生产或开发环境节点调度依赖关系配置存在差异,请确认该节点当前的调度依赖是否符合业务需要,避免由于依赖关系变更导致产出数据出现问题。若当前节点存在众多下游任务时,可能会产生较大影响,请明确业务场景后再谨慎操作。例如,当前节点提交时与生产环境该节点的调度配置比较,发现缺少了输入名A(即上游节点输出名为A),此时,您需要确认当前节点的调度依赖是否配置正常。若该节点代码中配置了依赖A表的数据,但未将产出A表数据的节点作为当前节点依赖的上游,则可能会出现A表数据未产出,当前节点便开始执行,最终导致当前节点产出的表数据出现问题。
- 其他注意事项
节点的SQL命令中,如果查询了非周期性生成数据的表(例如维表、从本地上传到DataWorks的表等表),自动解析会将此表添加为本节点的依赖的上游节点。但是通过这个依赖的上游节点找不到生成此非周期性生成数据表的节点,会导致调度错误,您需要手动将自动解析出来的依赖的上游节点删除。
- 代码开发要求
调度依赖配置指导:手动配置
- 应用场景
DataWorks支持在节点的代码开发过程中,手动修改节点的依赖的上游节点、本节点的输出。当通过自动解析生成的节点调度依赖配置与实际应用不符时,您可通过手动配置进行修改。
常见的应用场景包括:- 删除非周期性调度生产数据的表的自动解析配置结果
由于DataWorks的调度依赖主要保障的是调度节点定时更新的表数据,通过节点调度依赖保障下游取数没有问题,所以不是DataWorks平台上调度更新的表,平台无法监控。当存在非周期性调度生产数据的表,有节点select这类表数据时,您需要手动删除通过select自动生成的依赖的上游节点配置。非周期性调度生产数据的表包括:
- 从本地上传到DataWorks的表
- 维表
- 非DataWorks调度产出的表
- 手动任务产出的表
- 为不支持自动解析的部分节点,手动添加产出表为本节点的输出
离线节点、AnalyticDB for PostgreSQL节点、AnalyticDB for MySQL节点、EMR节点不支持通过自动解析添加节点的调度依赖,这些节点的产出表需要手动添加为本节点的输出。
- 删除非周期性调度生产数据的表的自动解析配置结果
- 配置方法
- 代码编辑页面删除
如上图所示,您可以在select了非周期性产出表的节点代码编辑页,右键相应的表名,进行删除输入的操作。您也可以在代码的最上方添加一条规则的注释,操作完成后自动解析将不会解析该依赖。
- 调度配置页面删除
如上图所示,您可以在select了非周期性产出表的节点调度配置的页面中,将自动解析开关选择为否,然后手动删除对应的依赖的上游节点。
- 代码编辑页面删除
- 注意事项
- 在调度配置页面配置时,将自动解析的开关选择为否后,建议您先单击解析输入输出,系统将使用与自动解析原理一致的方式,为您自动识别并添加好调度依赖关系,您可根据实际情况在此基础上进行删减操作。
- 单击清空输入输出,您可以将自动解析识别添加的调度依赖关系一键删除,已手动添加的调度依赖关系不会被删除。
-
单击自动推荐,系统将会基于本工作空间的SQL血缘关系,为您推荐产出当前节点输入表的其它所有SQL节点。您可以根据实际情况,选择推荐列表中的任务,配置为当前节点的依赖的上游节点。说明 由于需要提交发布至生产环境并真实产出该表数据的节点,才会被解析出来,所以自动解析推荐的节点有T+1的延迟。
被推荐节点需要在前一天提交至调度系统,第二天的数据产出之后,才可以被自动推荐功能识别。
调度依赖配置指导:鼠标拖拽
- 应用场景
DataWorks支持在业务流程的页面,直接通过连线的方式,指定各个节点的上下游关系。拉线完成后DataWorks根据您的拉线结果自动为您在各个节点中添加调度依赖配置。
当您创建完成业务流程后,您可根据业务规划,将各个节点按照节点的逻辑顺序,在业务流程页面通过拉线的方式配置好各个节点的依赖关系。后续在代码开发过程中,通过自动解析和手动修改的方式添加或修改各个节点的依赖关系,保障整体业务流程中所有节点的依赖关系是正确的。
- 实现原理
拉线指定上下游依赖时,DataWorks将自动生成的后缀为*******_out的输出添加为下游节点的输入中。
- 配置方法
在业务流程编辑页面,通过连线的方式将节点连接起来。
预览依赖关系
- 根据当前调度配置生成的依赖关系预览图,与生产环境的实际依赖关系可能存在差异,仅供参考。
- 目前仅支持开发、运维、项目所有者、项目管理员角色预览节点的依赖关系。如果您需要预览依赖关系,可为对应用户授权相关角色,详情请参见角色及成员管理:空间级。
- 目前仅支持查看当前节点的一级上游和一级下游。
- 单击预览依赖后,如果当前调度依赖未保存,您需要在请注意对话框单击确认,查看最新依赖关系。
- 实例依赖适用于预览产生多个周期实例的任务场景对应的依赖关系。例如,预览小时任务依赖分钟任务的依赖关系。
- 当依赖的上游节点为已保存状态时,当前节点预览的依赖关系才会符合预期。
- 选择预览方式。
您可以选择不聚合、按工作空间聚合、按责任人聚合等方式预览依赖关系。聚合方式详情请参见实例DAG图。
下图以预览任务依赖为例,为您展示不同聚合方式的预览效果。单击目标节点即可查看节点的基本信息。
- 预览多周期实例任务的依赖关系。
对于多周期任务,您可以使用实例依赖选择不同周期,查看相应依赖关系。
典型业务场景配置指导
调度配置完成后处理
各个节点在完成调度配置后,提交节点时,DataWorks会检查节点的调度依赖与节点代码中的数据血缘关系是否一致,如果出现不一致的提示,您需要根据实际情况查看是否需要修改调度依赖配置。详情可参见提交节点时提示:输入输出和代码血缘分析不匹配。