提交节点时提示:输入输出和代码血缘分析不匹配

问题现象

提交节点时,系统出现提示:输入输出和代码血缘分析不匹配。血缘检查现象

可能原因

当代码中SELECT的表与节点的依赖的父节点配置不一致,或代码中INSERT、CREATE的表与节点的本节点的输出不一致时,会出现该提示。

以上图为例,说明:

  • 您提交的节点代码中有SELECT名称为table2的数据,但是table2并没有配置为节点的依赖的父节点。

  • 您提交的节点中有将doc_test配置为节点的本节点的输出,但是节点代码中并没有INSERT或CREATE名称为doc_test的表。

解决方案

  • 非周期性生成数据的表可以忽略提示直接提交。

    由于DataWorks的调度依赖主要保障调度节点定时更新的表数据,所以非DataWorks平台上调度更新的表,平台无法监控。当节点代码中SELECT非周期性调度生产的表数据时,您需要删除通过SELECT自动生成的依赖的上游节点配置。非周期性调度生产数据的表包括:

    • 从本地上传到DataWorks的表

    • 维表

    • 非DataWorks调度产出的表

    • 手动任务产出的表

  • 对于周期性生成数据的表,您需要仔细检查表数据的血缘关系与调度依赖关系是否一致。

    如果您不检查直接强制提交节点,可能会导致以下影响:

    • 例如,代码中SELECT一张表A,并且表A是个调度节点每天定时产出的表(即表A不是非周期性生成数据的表),如果没有将表A添加为本节点的依赖的父节点,形成依赖关系的时,某次生成表A的节点没有执行成功的话,下游节点取表A的数据即取用的表A上一次运行结果的数据,可能会有问题。

    • 例如,在代码中CREATE或INSERT一张表B,没有将表B作为本节点的输出,则如果有节点SElECT表B,自动解析会自动将表B作为节点的输入,形成依赖关系,但是系统无法通过这个依赖关系找到产出表B的节点,提交节点时会报错:当前节点依赖的父节点输出名不存在。详情可参见提交节点报错:当前节点依赖的父节点输出名不存在