
# 自然周期调度之上一周期依赖原理
#### 自然周期调度的概念
自然周期调度作业的调度周期包括分钟、小时、天、周、月这五种周期，不同调度周期的作业，其允许配置的依赖作业调度周期总结如[图1]所示。
图1上一周期作业依赖关系全景图   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001544204526.png "点击放大")
即作业A的调度依赖于作业B的上一调度周期，包含以下场景：
#### 分钟依赖分钟
规则：分钟是最小调度粒度，没有自然分钟周期的概念，依赖策略是根据调度周期长的作业，往前推一个调度周期找依赖实例。
例如：A依赖B，A和B都是从每小时的0分开始，A每隔10分钟运行一次，B每隔15分钟运行一次，A依赖上一小时的45分B作业实例。
#### 分钟依赖小时
规则：分钟级作业依赖上一个自然小时周期的作业执行完成后，再执行。
例如：A依赖B，A分钟级作业依赖B小时级作业，A每10分钟触发，B是每小时第18分钟执行，那么作业A需要依赖前一小时18分的B作业实例。
#### 分钟依赖天
规则：分钟作业依赖自然天作业的前一个周期，需等上一个天周期作业执行完成后再执行。
例如：A依赖B，A分钟作业依赖B天作业，A每5分钟执行，B是2:30执行，那么A需要依赖前一天2:30之后B作业的实例。
#### 小时依赖分钟
规则： 小时作业依赖分钟作业，往前推到上一个自然小时范围内的分钟级实例。区间是前开后闭。
举例1：A依赖B，A为小时作业，每个小时0分执行，B为分钟作业，每15分钟运行一次；A会依赖上一小时B在45分钟时的作业实例。
#### 小时依赖小时
规则：每个自然小时周期内的实例产生依赖，区间边界是自然小时\[00:00,00:59\]，依赖策略是调度周期长的作业，往前推一个调度周期找依赖实例。
A依赖B，在同自然小时内，无论A、B设置在什么时间点执行，A永远在B的前一周期完成后执行。
举例：A在每小时5分0秒执行，B在12分执行，A会在每小时5分时依赖B上一小时生成的实例。
#### 小时依赖天
规则：小时作业依赖自然天的天作业，需等天作业的前一周期执行完成后再执行。
举例：A依赖B，A小时作业依赖B天作业，A每小时整点执行，B是2:30执行，那么A作业执行会依赖前一天2点30分B作业的运行实例。
#### 天依赖分钟
规则：按自然天，天周期作业实例依赖前一天内分钟级作业的实例。
举例：A依赖B，A为天作业，依赖B分钟作业， A依赖B在前一天内的最后一个实例， A会在最后一个B作业实例执行完成后执行。
#### 天依赖小时
规则：按自然天，天周期作业实例依赖前一天内最后一周期小时作业的实例。
举例：A依赖B，A为天作业，依赖B小时作业，A依赖B在前一天最后一个周期的小时作业实例执行。
#### 天依赖天
规则：按自然天的上一个周期实例进行依赖。 在同自然天内A依赖B ，无论A、B设置在什么时间点执行，A永远依赖B的前一周期实例执行。 天区间为\[00:00:00,23:59:59\]
举例：A在2:00执行，B在3:00执行，A会依赖B在前一个周期3:00执行的实例，在当前周期2点执行。
#### 天依赖周
规则：依赖自然天，天作业依赖前一天的周作业，如果周作业在前一天未执行，天作业直接执行。如果周作业在前一天执行，天作业会等待周作业执行完成后，再开始执行。
举例1：A依赖B，A作业每天执行，B作业每周三执行。在A作业执行时，前一天非周三，B作业未执行，A作业则直接执行。
举例2：A依赖B，A作业每天执行，B作业每周三执行。在A作业执行时，前一天是周三，B作业会执行，则A作业等待B作业执行完成后，开始执行。
#### 天依赖月
规则：天作业依赖自然月的作业，需等月作业执行完成上一周期后再执行。
例如：A依赖B，A为天作业每天执行一次，B为月作业每月15号执行一次。A作业的执行依赖B作业上个月15号的运行实例。
#### 周依赖小时
规则：依赖自然天，范围是\[前一天的零点,当天的零点)，查找前一天的小时任务作业B是否执行完成，然后执行周任务作业A。
举例：A依赖B，A作业每周一调度，B作业每小时第50分钟执行。则A作业会一直等待B作业执行，一直到B作业上周日最后一个任务23:50分的任务执行完成后，A作业依赖B作业上周日最后一个任务23:50分的运行实例。
#### 周依赖天
规则：周作业依赖前一天的天作业，需等前一天作业完成后再执行。
例如：A依赖B，B为天作业每天执行一次，A为周作业每周一执行一次。A作业的执行依赖B作业前一天的运行实例。
#### 周依赖周
规则：周作业依赖前一天的周作业，需等前一天周作业完成后再执行，如果前一天没有实例，则不需要依赖。
例如：A依赖B，B为周作业每周一执行一次，A为周作业每周二执行一次。A作业的执行依赖B作业周一的运行实例。
#### 周依赖月
规则：依赖自然天，周作业依赖前一天的月作业，如果月作业在前一天未执行，周作业直接执行。如果月作业在前一天执行，周作业会等待月作业执行完成后，再开始执行。
举例1：A依赖B，A作业每周三执行，B作业每月10号执行。在A作业执行时，如果前一天正好是10号，A作业会等待B作业执行完成后执行。
举例2：A依赖B，A作业每周三执行，B作业每月10号执行。在A作业执行时，如果前一天不是10号，则A作业直接执行。
#### 月依赖天
规则：月作业依赖前一天的天作业，需等前一天作业完成后再执行。
例如：A依赖B，B为天作业每天执行一次，A为月作业每月一执行一次。A作业的执行依赖B作业前一天的运行实例。
#### 月依赖周
规则：依赖自然天，月作业依赖前一天的周作业，如果周作业在前一天未执行，月作业直接执行。如果周作业在前一天执行，月作业会等待周作业执行完成后，再开始执行。
举例1：A依赖B，A作业每月10号执行，B作业每周三执行。在A作业执行时，前一天非周三，B作业未执行，A作业则直接执行。
举例2：A依赖B，A作业每月10号执行，B作业每周三执行。在A作业执行时，前一天正好是周三，B作业会执行，则A作业等待B作业执行完成后开始执行。
#### 月依赖月
规则：依赖自然天，月作业依赖前一天的月作业，如果被依赖的月作业如果在依赖作业之后执行，则依赖作业不会阻塞，正常执行。除此之外均会按照依赖关系去执行。
举例1：A依赖B，A作业每月1号执行，B作业每月2号执行，A作业1号正常执行，B作业不阻塞A作业执行。
举例2：A依赖B，A作业和B作业都是2号执行，A作业会依赖B作业执行完成后的作业实例。
举例3：A依赖B，A作业每月3号执行，B作业每月2号执行，3号A作业依赖2号B作业。
