提交节点报错:当前节点依赖的父节点输出名不存在

问题现象

提交节点时,系统报错,提示当前节点依赖的父节点输出名不存在。依赖的父节点输出名不存在以上图为例,出现此类报错说明,系统无法通过本节点配置的这条父节点输出名称的依赖关系,找到产出表xc_ods_user_info_d_133的上游节点。

说明

出现此报错,说明调度依赖配置里的节点输出名不存在(即没有节点将这个节点输出名配置为本节点的输出),并不是指表不存在。如果表存在,且由某个节点产出,但是没有将这个表添加为节点的输出,也会出现此类报错。

可能原因1:没有节点产出这个表

  • 可能原因

    出现此种情况的原因之一是:确实没有节点产出这个表。

    对于大部分场景,DataWorks可通过自动解析,自动将产出表添加为节点的本节点的输出,但是对于非周期性生成的表,不支持使用自动解析。非周期性调度生产数据的表包括:

    • 从本地上传到DataWorks的表

    • 维表

    • 非DataWorks调度产出的表

    • 手动任务产出的表

    当有节点SELECT非周期性调度生成数据的表时,就会出现上述报错。

  • 解决方案

    您需要手动删除包含非周期性生成数据的表相关的依赖配置。本示例中,即您需要手动将父节点输出名称xc_ods_user_info_d_133的调度依赖配置删除。

    手动删除调度依赖的具体操作可参见配置同周期调度依赖

可能原因2:有节点产出该表数据,但是该表没有添加为该节点的输出

  • 可能原因

    出现此种情况的另外一个可能的原因是:有节点产出该表数据,但是该表没有添加为该节点的输出。

    对于大部分场景,DataWorks可通过自动解析,自动将产出表添加为节点的本节点的输出,但是对于一些特殊的节点,DataWorks不支持使用自动解析。离线节点、AnalyticDB for PostgreSQL节点、AnalyticDB for MySQL节点、EMR节点不支持通过自动解析添加节点的调度依赖,这些节点的产出表需要手动添加为本节点的输出。

    当有节点SELECT这类节点生成的表,且产出这个表的没有手动添为节点的产出时,就会出现上述报错。

  • 解决方案

    您需要手动将表添加为产出该表节点的输出。本示例中,即您需要手动将xc_ods_user_info_d_133添加为产出这个表的本节点输出

    手动添加调度依赖的具体操作可参见配置同周期调度依赖

为了避免依赖关系配置错误导致数据出现问题,DataWorks会在提交节点时对表数据血缘关系的输入输出与调度配置的输入输出进行比较,如果不一致会给您提示,详情可参见提交节点时提示:输入输出和代码血缘分析不匹配

不是DataWorks每天调度产出的表数据,是不需要设置节点依赖关系的,这类表依赖可以删除,删除后提交节点时,会出现血缘关系与调度依赖配置不一致的提示,您可确认一下,是否除了删除的非周期性生成数据表的依赖关系外,有没有其他血缘与调度配置不一致的地方,没有的话可以强制提交节点。

可能原因3:存在同名的节点输出

  • 可能原因

    出现此种情况的另外一个可能的原因是:有多个节点的本节点产出名称一样。此原因可能由两种场景造成:

    • 有多个节点产出了同一张表。

      如果有多个节点产出了同一个表,当有节点SELECT这张表时,系统无法找到准确且唯一的产出这张表的节点,提交节点时会出现上述报错。

    • 同个项目中存在同名的节点。

      由于节点创建时,系统会自动为节点添加两个本节点产出,其中一个名称命名规则为projectname.nodename,如果同一个项目下有两个同名节点,这两个节点自动生成的本节点产出名称一样,提交会出现上述报错。

  • 解决方案

    需严格按照代码开发规范和界面命名建议进行整改:

    • 一张表由一个节点产出,节点的产出表需添加为本节点的产出。

    • 同项目中的节点命名不重复。

    整改后,需确保不存在多个节点的本节点产出名称相同。