
# 自然周期调度之同周期依赖原理
#### 解释说明
即作业A依赖于作业B的相同调度周期的运行实例。周期单位包括分钟、小时、天、周、月这五种，不同调度周期的作业，其允许配置的依赖作业调度周期总结如[图1]所示。
图1同周期作业依赖关系全景图   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001594963969.png "点击放大")
#### 分钟依赖分钟
规则：分钟是最小调度粒度，没有自然分钟周期的概念，依赖策略是往前推一个调度周期找依赖实例。
举例1：A依赖B，为同周期分钟作业，在同一时间点，B执行完后开始执行A。
图2分钟依赖分钟举例一   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001574112061.png "点击放大")
举例2：A依赖B，A为15分钟周期，B为10分钟周期，A往前推15分钟（包括当前启动整点），依赖范围内的B实例，在2:15分执行A任务依赖1个B实例（2:10分），2:30执行的A任务依赖两个B实例（2:20和2:30）。它的边界范围为(0分,15分\]，前开后闭区间。
图3分钟依赖分钟举例二   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001523632046.png "点击放大")
#### 分钟依赖小时
规则：分钟级作业依赖自然小时的上一周期作业执行完成后，再执行。
举例：A依赖B，A分钟级作业依赖B小时级作业，A每10分钟触发，B是每小时第16分钟执行，那么作业A实例会在B作业上一周期执行完成后再执行。
图4分钟依赖小时   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001573912373.png "点击放大")
#### 分钟依赖天
规则：分钟作业依赖自然天的天作业，需等天作业执行完成后再执行。
例如：A依赖B，A分钟作业依赖B天作业，A每30分钟执行，B是22:45执行，那么22:45之前的A作业实例都会推迟到B作业执行完成后再执行。
图5分钟依赖天   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001523472142.png "点击放大")
#### 小时依赖分钟
规则：小时作业依赖分钟作业，往前推到上一个自然小时范围内的分钟级实例，最后一个分钟级实例运行完成后再开始运行小时作业。区间是前开后闭(2:00,3:00\]。
举例1：A依赖B，A为小时作业，每个小时0分执行，B为分钟作业，每15分钟执行一次；B执行完后执行A。A作业依赖自然小时范围内B作业实例的最后一个实例，执行的A任务会依赖3:00运行完的B作业实例。
图6小时依赖分钟举例一   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001574071909.png "点击放大")
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
- 如果小时作业依赖的分钟区间范围是(1:50,2:50\]，则小时作业是2点50执行，依赖的是分钟作业在2点50的作业实例。
- 如果在配置作业依赖关系时勾选"最近"依赖的按钮，小时作业只依赖所选作业最近的一个运行实例，比如A在3:00开始调度，A依赖B最近的2:45调度的一个运行实例。
- 如果作业A在零点进行调度，所依赖作业B可以是昨天的分钟任务。
 
#### 小时依赖小时
规则：每个自然小时周期内的实例产生依赖，区间边界是自然小时\[00:00,00:59\]。
举例1：A依赖B，在同自然小时内，无论A、B设置在什么时间点执行，A永远在B之后执行。
图7小时依赖小时举例一   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001523791990.png "点击放大")
举例2：A依赖B，A在每小时5分0秒执行，B在12分执行，A会等B执行完成后执行。
图8小时依赖小时举例二   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001523951966.png "点击放大")
#### 小时依赖天
规则：小时作业依赖自然天的天作业，需等天作业执行完成后再执行。
举例：A依赖B，A小时作业依赖B天作业，A每小时整点执行，B是2:30执行，那么2:30之前的A作业实例都会推迟到B作业执行完成后再执行。
图9小时依赖天   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001574112065.png "点击放大")
#### 天依赖分钟
规则：按自然天，天周期作业实例依赖一天内所有分钟级作业的实例。
举例：A依赖B，A为天作业，每天22点调度，依赖B分钟作业，每30分钟调度一次，A依赖所有B在自然天内的实例， A会在最后一个B作业实例执行完成后执行。
图10天依赖分钟   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001523632050.png "点击放大")
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
如果在配置作业依赖关系时勾选"最近"依赖的按钮，天作业只依赖所选作业最近的一个运行实例，比如A在每天22点开始调度，A依赖B最近的21:30调度的一个运行实例。
#### 天依赖小时
规则：按自然天，天周期作业实例依赖一天内所有小时作业的实例。A为天作业，依赖B小时作业，A依赖所有B在自然天内的实例，A会在最后一个B小时作业实例执行完成后执行。
举例：A依赖B，A配置的调度时间为每天17点执行一次，B从0点开始，每5个小时执行一次，那么A实际执行时间为JobB在20点的实例运行完之后开始运行。
图11天依赖小时   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001573912377.png "点击放大")
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
如果在配置作业依赖关系时勾选"最近"依赖的按钮，天作业只依赖所选作业最近的一个运行实例，比如A在每天17点开始调度，A依赖B最近的15:00调度的一个运行实例。
#### 天依赖天
规则：按自然天内的实例进行依赖，不会跨天向前推找依赖实例。在同自然天内A依赖B ，无论A、B设置在什么时间点执行，A永远在B之后执行。 天区间为\[00:00:00,23:59:59\]
举例1：A依赖B，A在2:00执行，B在3:00执行，A会等B在3:00执行完成后执行。
图12天依赖天举例一   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001523472146.png "点击放大")
举例2：A依赖B，A在5:00执行，B在3:00执行，A在B执行完成后，在5:00执行。
图13天依赖天举例二   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001574071913.png "点击放大")
#### 天依赖周
规则：依赖自然天，天作业依赖当天的周作业。如果周作业在当天未执行，天作业直接执行。如果周作业在当天执行，天作业会等待周作业执行完成后，再开始执行。
举例1：A依赖B，A作业每天执行，B作业每周三执行。在A作业执行时，B作业当天非周三，未执行，A作业则直接执行。
举例2：A依赖B，A作业每天执行，B作业每周三执行。在A作业执行时，B作业正好当天是周三，会执行，则A作业等待B作业执行完成后，开始执行。
#### 天依赖月
规则：依赖自然天，天作业依赖当天的月作业，如果月作业在当天未执行，天作业直接执行。如果月作业在当天执行，天作业会等待月作业执行完成后，再开始执行。
举例：A依赖B，A为天作业每天执行一次，B为月作业每月15号执行一次。如果当天非15号，B作业未执行，不会生成作业实例，A作业则直接执行；如果当天正好是15号，A作业会在B作业执行完成后执行。
图14天依赖月   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001574231917.png "点击放大")
#### 周依赖小时
规则：依赖自然天，范围是\[当天的零点零分零秒,当天的23点59分59秒)，查找当天的小时任务作业B是否全部执行完成，然后执行周任务作业A。
举例：A依赖B，A作业每周一调度，B作业每小时第50分钟执行。则A作业会一直等待B作业执行，一直到B作业周一最后一个任务23:50分的任务执行完成后，A作业依赖B作业当天所有任务的运行实例。
#### 周依赖天
规则：周作业只依赖同一天调度执行的作业。
举例：A依赖B，A作业计划周二执行，B作业每天运行，A周二的作业会在周二的B作业执行完后再执行。
图15周依赖天   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001578881552.png "点击放大")
#### 周依赖周
规则：周作业只依赖同一天调度执行的作业实例。
举例1：A依赖B，A作业计划周二执行；B作业计划周三执行；作业A依赖作业B，实际上A会在周二执行，不会等到周三B执行完。
图16周依赖周举例一   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001523951970.png "点击放大")
举例2：A、B作业都是周二执行，A依赖B，A会等B执行完执行。
图17周依赖周举例二   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001574112069.png "点击放大")
#### 周依赖月
规则：依赖自然天，周作业依赖当天的月作业。如果月作业在当天未执行，周作业直接执行。如果月作业在当天执行，周作业会等待月作业执行完成后，再开始执行。
举例1：A依赖B，A作业每周三执行，B作业每月10号执行。在A作业执行时，如果正好是10号，A作业会等待B作业执行完成后执行。
举例2：A依赖B，A作业每周三执行，B作业每月10号执行。在A作业执行时，如果不是10号，则A作业直接执行。
#### 月依赖天
规则：A依赖B，月调度任务，只依赖于当前的天任务完成后，即可运行。
举例：A依赖B，A为月作业，依赖B天作业， A依赖所有B在月任务当天的那个实例，A就可运行。
图18月依赖天   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001523632054.png "点击放大")
#### 月依赖周
规则：依赖自然天，月作业依赖当天的周作业。如果周作业在当天未执行，月作业直接执行。如果周作业在当天执行，月作业会等待周作业执行完成后，再开始执行。
举例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作业。
