一、场景
小明有一个A任务依赖于另一个同事开发的B任务,小明发布A任务的时候不知道B任务有没有发布,每次都需要手动确认上游任务是否已发布,这样依赖层级很多的话就会很麻烦,可以优化一下吗?
之前的任务发布时是单个任务发布,只会在发布的那一刻校验依赖关系,如果依赖的上游任务没有发布就会报错,那么可以在发布之前就根据任务的依赖关系并形成正确的发布顺序,简化发布流程吗?
二、解决方案及功能
Dataphin会在发布之前解析必选依赖、可选依赖,可以根据自己的需要选择发布范围为【必选依赖和可选依赖】、【仅必选依赖】、【仅已选(不发布上游依赖)】,以两个新增的任务为例:
①新建A任务和B任务,其中A任务依赖于B任务
②此时如果B没有发布,生产环境没有B任务时A也不能发布,因此B是A的必选依赖
小明在发布A任务时,发布范围选择【必选依赖和可选依赖】或者【仅必选依赖】都可以
系统默认会选择【必选依赖和可选依赖】,如果不想关注上游依赖的发布状态,无需选择发布范围,跟着系统默认走就可以
③如果选择了【仅已选(不发布上游依赖)】,那么也可以发布,只是发布会失败
④从发布日志中可以看到,失败原因是因为上游依赖任务没有发布
通过这种方式,系统可以在发布之前识别上游依赖,无需发布者手动识别,也不用等单个任务发布失败之后再去找失败原因
具体必选依赖、可选依赖的定义如下:
假设对象A依赖对象B (如: 1. 任务A依赖任务B; 2. 原子指标A依赖其来源逻辑表B 等), 则发布时: 1. B的变更类型为新增,A为新增或变更(A添加新的上游依赖B),发布A时须先发布B, 否则A将发布失败。则B是A的必选依赖。A,B均为删除时,A是B的必选依赖。 2. B为变更,A为新增或变更, 不先发布B,A也可能发布成功。则B是A的可选依赖。 注意: 不发布B只发布A,A基于B的旧逻辑运行有可能与预期不符。 3. 如果当前用户无B的发布权限,则列表将不会列举B,受B影响的下游发布项可能发布失