在DataWorks使用上,我们通过代码自动解析+设置节点依赖关系配置节点依赖,通过上下游关系正常及节点运行状态来保障业务数据的顺序产出。
设置节点依赖关系的目的在于,检测我们sql里面所查询的表的数据是几点产出的,我们通过节点的状态成功默认上游数据数据顺利产出。
本文所说的是依赖同周期任务的情况
(如果需要依赖上游节点上一周期请选择依赖上一周期。
查看上游的数据写入和读取的分区是不是本节点想要的,需要在运维中心的周期实例看上游节点和本节点的调度参数替换的情况以及sql里面参数替换的情况。)
后期详述上述场景。
自动解析原理
select 一张表会将自动解析作为本节点依赖的上游。
insert一张表,该表会自动解析作为本节点的输出。
依赖关系原理
上游节点的本节点输出作为下游节点的本节点输入。
通过自动解析原理+依赖关系原理我们带入实际场景看报错:
现象:依赖的上游没有解析到父节点id,提交报错。
现象说明:该报错并不是指该表不存在,只是在说明该表不是某个节点的本节点输出,无法通过这个表去找到产出这个表数据的节点,从而与这个节点挂上依赖。
我们通过上游节点的本节点输出作为下游节点的本节点输入,根据上面自动解析的原理可知,我在sql中查询了xc_demo_partition这个表这个,但是自动解析的时候没有通过这个表找到上游节点,说明没有一个节点将这个表xc_demo_partition作为本节点输出。
解决方案:
一、找到产出该表的节点任务,查看该节点任务的本节点输出是什么。
如果没有不清楚那个节点里面有操作这个表,我们可以使用代码搜索功能通过关键字进行模糊查找。
二、如果是本地上传的表数据或者不需要依赖该节点可以选择在代码区右键-删除输入。
请注意:删除输入后请重新保存再自动解析输入输出。
--@extra_input=表名 --添加输入
--@extra_output=表名 --添加输出
--@exclude_input=表名 --删除输入
--@exclude_output=表名 --删除输出
删除输入的影响:若你本节点依赖了一张表的数据,但是这个表并没有作为本节点的上游 在没有做依赖的情况下可能导致本节点去拿上游表数据的时候上游表数据还没产出,导致本节点取数出现问题。
删除输出的影响:本节点往某张表写入数据,但是该节点没有将这个表作为本节点输出,那下游去取该表数据并且自动解析将这个表作为上游了,他提交会报错(如本案例中的错),那是因为自动解析的时候通过该表没有找到产出该表数据的上游节点。影响自动解析的效果。
为保证代码血缘的准确性,请减少使用自定义依赖的次数。