注意: 以下规则适用于Dataphin v3.11及之前版本,v3.12的调度依赖规则请见 Dataphin依赖周期和依赖策略详解 。
一、实例开始运行条件说明
- 依赖的上游实例全部运行成功 -- 满足此条件,即变成“等待中”状态(可能在等待到达定时运行时间或者等待分配调度资源,后续版本拆分了“等待调度时间”和“等待调度资源”)
- 到达当前实例的定时运行时间,且已分配调度资源 -- 满足此条件,即变成“运行中”状态(但是如果因为没有足够的运行资源导致的运行无法进行,dataphin侧无法感知,需要通过在计算引擎侧查询)
二、调度依赖关系说明
case1:天任务依赖小时任务
【场景】:
- 上游小时任务非自依赖(即小时任务本身未配置依赖上周期),彼此独立:
- 每个小时跑全量数据:一般是维表场景,此时只要依赖最近一个调度周期的实例即可;但是维表一般变化较缓慢,较少设置为小时粒度的全量更新(当前不支持该种调度依赖策略)
- 每个小时跑增量数据,但是周期间无依赖关系:一般是日志表,此时需要依赖上游全部实例(当前实现逻辑)
- 上游小时任务自依赖(即小时任务本身配置了依赖上周期),即下一个小时依赖上一个小时的数据:
- 每个小时跑全量数据:比如全量数据写入drds,为了防止重复写入,会设置依赖上周期
- 每个小时跑增量数据,但是周期间有依赖关系:比如merge,每个小时都要将前一个小时的数据merge到结果表;此时仅依赖最近一个调度周期的实例,具体需要依赖哪个周期,通过起调时间控制
【实现逻辑】:
1. 下游天任务和上游小时任务是同周期依赖:
- 上游小时任务如果如果是自依赖(即小时任务本身配置了依赖上周期), 则会根据定时运行时间挂最近一个周期的上游小时任务
- 依赖上游定时运行时间>=自己定时运行时间最近一个实例
- 例:上游小时任务固定整点调度,下游天实例定时每日5点0分起调,则天实例会依赖上游5点0分的小时实例;如果下游天实例定时每日5点01分起调,则天实例会依赖上游6点0分的小时实例)
- 上游小时任务如果不是自依赖(即小时任务本身没有配置依赖上周期), 则会依赖上游所有的小时实例
2. 下游天任务和上游小时任务是跨周期依赖(即下游天任务依赖上游小时任务的上周期):
- 上游小时任务如果是自依赖, 则会依赖上游前一天最后一个小时实例
- 上游小时任务如果不是自依赖, 则会依赖上游前一天所有的小时实例
case2:小时任务依赖小时任务
- 依赖上游定时运行时间>=自己定时运行时间最近一个实例(考虑到每个小时实例跑的是前面小时的数据,从数据依赖合理性考虑)
- 例1:
- 上游小时任务和下游小时任务同周期依赖,且都是每个整点起调,则下游1点的实例依赖上游1点的实例,下游2点的实例依赖上游2点的实例,依次类推
- 如果需要实现下游2点的实例依赖上游1点的实例,可以通过配置下游任务依赖上游任务的上周期实现(默认子任务2点的实例依赖父任务2点的实例,设置为依赖上周期之后,即依赖父任务2点实例的上周期,也就是1点实例,以实现子任务2点的实例依赖父任务1点的实例的场景)
- 例2:同周期依赖,上游小时任务是每个整点起调,下游小时任务是每小时的05分开始起调,则下游0点05分的实例依赖上游1点的实例,下游1点点15分的实例依赖上游2点的实例,依次类推
- 例3:不同批次调度,同周期依赖,上游小时任务是每隔4个小时整点起调,下游小时任务是每个小时的15分开始起调,则下游0点15分、1点15分、2点15分、3点15分的实例,都依赖上游4点的实例,依次类推