问题现象
提交节点时,系统出现提示:输入输出和代码血缘分析不匹配。
可能原因
当代码中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的节点,提交节点时会报错:当前节点依赖的父节点输出名不存在。详情可参见提交节点报错:当前节点依赖的父节点输出名不存在。