调度依赖关系是您构建有序业务流程的根本,只有正确构建任务依赖关系,才能保障业务数据有效、适时地产出。本文为您介绍调度依赖的配置指导。
背景信息

调度配置完成后,提交节点时,DataWorks会检查节点的调度依赖与节点代码中的数据血缘关系是否一致,详情可参见调度配置完成后处理。
通用配置原则
- 本节点的输出指当前节点的输出,输出节点名称是全局唯一的,在整个阿里云账号内不允许重复。
- 依赖的上游节点指当前节点依赖的上游节点,配置后,DataWorks会通过配置的上游节点输出名或输出表名进行找到依赖的上游节点。
如果您通过手动搜索上游输出名添加,则搜索器会根据已提交至调度系统中的节点的输出名来进行搜索。
调度依赖配置指导:自动解析
- 应用场景
DataWorks支持根据任务节点中的SQL命令,自动解析出表数据的血缘关系,以表数据的血缘关系为基座,为节点自动添加本节点的输出或依赖的上游节点,自动解析高效便捷,适用于绝大部分场景。
- 实现原理
下图为自动解析依赖关系的原理。如果出现的多个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命令后的表名称。
离线同步节点 离线同步节点不支持自动解析,需要手动添加节点的调度依赖配置。 - 注意事项
- 代码开发要求
自动解析完全依据您的任务节点中代码自动识别,因此您在进行数据开发时,建议严格遵循DataWorks的代码开发要求和节点创建要求:
- 代码开发要求:一张表数据由一个节点产出,一个节点只产出一张表。
- 节点创建要求:建议节点名称与产出表的表名称保持一致。
- 调度配置要求:节点的产出表需配置为本节点的输出。
- 不支持自动解析的场景
- 离线节点、AnalyticDB for PostgreSQL节点、AnalyticDB for MySQL节点、EMR节点不支持通过自动解析添加节点的调度依赖,这些节点的产出表需要手动添加为本节点的输出。
- SQL代码中的临时表(例如在工作空间配置中指定t_开头的表为临时表)不支持自动解析,不会被自动解析为本节点的输出或依赖的上游节点。
- 不规范使用的处理逻辑
- 如果SQL语句中的一个表名既是产出表又是被引用表(被依赖表),则解析时只解析为产出表。
- 如果SQL语句中的一个表名被多次引用或被多次产出,则解析时只解析一个调度依赖关系。
- 其他注意事项
节点的SQL命令中,如果查询了非周期性生成数据的表(例如维表、从本地上传到DataWorks的表等表),自动解析会将此表添加为本节点的依赖的上游节点。但是通过这个依赖的上游节点找不到生成此非周期性生成数据表的节点,会导致调度错误,您需要手动将自动解析出来的依赖的上游节点删除。
- 代码开发要求
调度依赖配置指导:手动配置
- 应用场景
DataWorks支持在节点的代码开发过程中,手动修改节点的依赖的上游节点、本节点的输出。当通过自动解析生成的节点调度依赖配置与实际应用不符时,您可通过手动配置进行修改。
常见的应用场景包括:- 删除非周期性调度生产数据的表的自动解析配置结果
由于DataWorks的调度依赖主要保障的是调度节点定时更新的表数据,通过节点调度依赖保障下游取数没有问题,所以不是DataWorks平台上调度更新的表,平台无法监控。当存在非周期性调度生产数据的表,有节点select这类表数据时,您需要手动删除通过select自动生成的依赖的上游节点配置。非周期性调度生产数据的表包括:
- 从本地上传到DataWorks的表
- 维表
- 非DataWorks调度产出的表
- 手动任务产出的表
- 为不支持自动解析的部分节点,手动添加产出表为本节点的输出
离线节点、AnalyticDB for PostgreSQL节点、AnalyticDB for MySQL节点、EMR节点不支持通过自动解析添加节点的调度依赖,这些节点的产出表需要手动添加为本节点的输出。
- 删除非周期性调度生产数据的表的自动解析配置结果
- 配置方法
- 代码编辑页面删除
如上图所示,您可以在select了非周期性产出表的节点代码编辑页,右键相应的表名,进行删除输入的操作。您也可以在代码的最上方添加一条规则的注释,操作完成后自动解析将不会解析该依赖。
- 调度配置页面删除
如上图所示,您可以在select了非周期性产出表的节点调度配置的页面中,将自动解析开关选择为否,然后手动删除对应的依赖的上游节点。
- 代码编辑页面删除
- 注意事项
- 在调度配置页面配置时,将自动解析的开关选择为否后,建议您先单击解析输入输出,系统将使用与自动解析原理一致的方式,为您自动识别并添加好调度依赖关系,您可根据实际情况在此基础上进行删减操作。
- 单击清空输入输出,您可以将自动解析识别添加的调度依赖关系一键删除,已手动添加的调度依赖关系不会被删除。
-
单击自动推荐,系统将会基于本工作空间的SQL血缘关系,为您推荐产出当前节点输入表的其它所有SQL节点。您可以根据实际情况,选择推荐列表中的任务,配置为当前节点的依赖的上游节点。说明 由于需要提交发布至生产环境并真实产出该表数据的节点,才会被解析出来,所以自动解析推荐的节点有T+1的延迟。
被推荐节点需要在前一天提交至调度系统,第二天的数据产出之后,才可以被自动推荐功能识别。
调度依赖配置指导:系统生成
- 一个本节点的输出名称的后缀为*******_out
- 一个本节点的输出名称为
projectname.nodename

系统自动生成的本节点的输出的应用与其他自动解析或手动添加的本节点的输出使用方法一致。
调度依赖配置指导:拉线配置
- 应用场景
DataWorks支持在业务流程的页面,直接通过连线的方式,指定各个节点的上下游关系。拉线完成后DataWorks根据您的拉线结果自动为您在各个节点中添加调度依赖配置。
当您创建完成业务流程后,您可根据业务规划,将各个节点按照节点的逻辑顺序,在业务流程页面通过拉线的方式配置好各个节点的依赖关系。后续在代码开发过程中,通过自动解析和手动修改的方式添加或修改各个节点的依赖关系,保障整体业务流程中所有节点的依赖关系是正确的。
- 实现原理
拉线指定上下游依赖时,DataWorks将自动生成的后缀为*******_out的输出添加为下游节点的输入中。
- 配置方法
在业务流程编辑页面,通过连线的方式将节点连接起来。
典型业务场景配置指导
调度配置完成后处理
各个节点在完成调度配置后,提交节点时,DataWorks会检查节点的调度依赖与节点代码中的数据血缘关系是否一致,如果出现不一致的提示,您需要根据实际情况查看是否需要修改调度依赖配置。详情可参见提交节点时提示:输入输出和代码血缘分析不匹配。