本文将为您介绍如何配置时间属性,包括调度周期和依赖项。

单击页面右侧的调度属性,进入时间属性模块。
时间属性

实例生成方式

  • T+1次日生成:全量转实例。
    • 23:30之前提交发布的任务,第二天产生实例。
    • 23:30之后提交发布的任务,第三天产生实例。
  • 发布后即时生效:详情请参见实时转实例

节点状态

  • 正常调度:会按照调度周期时间配置调度,并正常执行,通常任务默认选中此项。
  • 空跑调度:会按照调度周期时间配置调度,但都是空跑执行,即一调度到该任务便直接返回成功,没有真正的执行任务。
  • 出错重试:节点出现错误,可以重跑节点。默认出错自动重试3次,时间间隔为2分钟。
  • 暂停调度:暂停调度之后,会按照下面的调度周期时间配置调度,但是一调度到该任务会直接返回失败,不会执行。通常用于某个任务暂时不用执行但后面还会继续使用的场景。

调度周期

DataWoks中,当一个任务被成功提交后,底层的调度系统从第二天开始,将会每天按照该任务的时间属性生成实例,并根据上游依赖的实例运行结果和时间点运行。23:30之后提交成功的任务从第三天开始才会生成实例。

说明

如果有一个任务需要每周一执行一次,那么只有运行时间是周一的情况下,该任务才会真正执行。运行时间不是周一的情况下,该任务会空跑(直接将任务置为成功),不会实际运行。所以在测试/补数据时,周调度任务需要选择业务日期=运行时间-1。

一个周期运行的任务,其依赖关系的优先级大于时间属性。在时间属性决定的某个时间点到达时,任务实例不会马上运行,而是先检查上游是否全部运行成功。

  • 上游依赖的实例没有全部运行成功,并且已到定时运行时间,则实例仍为未运行状态。
  • 上游依赖的实例全部运行成功,并且未到定时运行时间,则实例进入等待时间状态。
  • 上游依赖的实例全部运行成功,并且已到定时运行时间,则实例进入等待资源状态准备运行。

如果您选择依赖上一周期,配置方法请参见依赖上一周期

天调度

天调度任务,即每天自动运行一次。新建周期任务时,默认的时间周期为每天0点运行一次,可根据需要自行指定运行时间点,例如下图指定每天13点运行一次。
天调度
  • 当勾选定时调度,则每日任务实例定时时间为—当天日期年-月-日 定时时:分:秒。
    说明 调度任务需满足上游任务执行成功,并且已到定时时间两个条件,任务才能成功执行。任何一个条件没有满足都无法执行,两个条件没有先后顺序。
  • 当不勾选定时调度,则每日任务实例定时时间—当天日期年-月-日,默认调度时间,从0点到0点30分随机生成。

应用场景:

导入、统计加工和导出任务,都是天任务,具体时间如上图的13:00 。统计加工任务依赖导入任务,导出任务依赖统计加工任务,依赖配置如下图(统计加工任务的依赖属性配置上游任务为导入任务)所示。
应用场景
上图的配置,调度系统会自动为任务生成实例并运行。
生成并运行

周调度

周调度任务,即每周的特定几天在特定时间点自动运行一次。当到了没有被指定的日期时,为保证下游实例正常运行,系统也会生成实例但直接设置为运行成功,而不会真正执行任何逻辑,也不会占用资源。
周调度

如上图所示,每周一、周五两天生成的实例会正常的调度执行,而周二、三、四、六以及周日5天都是生成实例然后直接设置为运行成功。

上图的配置,调度系统会自动为任务生成实例并运行。
生成并运行

月调度

月调度任务,即每月的特定几天在特定时间点自动运行一次。当到了没有被指定的日期时,为保证下游实例正常运行,系统也会每天生成实例但直接设置为运行成功,而不会真正执行任何逻辑,也不会占用资源。
月调度

如上图所示,每月1日生成的实例会正常的调度执行,其他日期每天都是生成实例并直接设为运行成功。

上图的配置,调度系统会自动为任务生成实例并运行。
生成并运行

小时调度

小时调度任务,即每天指定的时间段内,按N*1小时的时间间隔运行一次,例如每天1点到4点的时间段内,每1小时运行一次。

说明 时间周期按左闭右闭原则计算,例如配置为从0点到3点的时间段内,每隔1个小时运行一次,表明时间区间为[00:00,03:00],间隔为1小时,调度系统将会每天生成4个实例,分别在0点/1点/2点/3点运行。

小时调度
如上图的配置,表示每天00点整到23点59分这个时间段内,每隔6小时会自动调度一次,因此调度系统会自动为任务生成实例并运行。
生成并运行

分钟调度

分钟调度任务,即每天指定的时间段内按N*指定分钟的时间间隔运行一次。

如下图所示,每天00:00开始到23:00的时间段内,每隔30分钟调度一次。
示例
目前分钟仅支持最小5分钟的粒度,时间表达式根据上面选择的时间生成,不能手动修改。
选择时间
说明 关于实时转实例的详细解释,请参见实时转实例

常见问题

  • Q:我的上游A是小时任务,下游是日调度,任务每天在A任务全部执行完成之后要汇总执行一次,这样可以相互依赖吗?

    A:日任务依赖小时任务是可以的,A任务配置成小时调度,任务配置成日调度不定时,配置为上下游依赖(依赖配置请看调度依赖说明),这样每天A任务成功运行24小时的实例后,B任务即可运行。所以每种周期的任务都可以相互依赖,每个任务的调度周期都是任务本身时间属性决定。

  • Q:A节点每天每小时整点执行一次,B节点每天跑一次,如何设置A节点每天第一次跑成功后,B节点便开始执行?

    A:配置A节点时,需要勾选依赖上一周期,并选择本节点,B节点的定时时间设为0点,这样每天自动调度实例中,B节点实例便只依赖A节点0点的实例,即A节点的第一个实例。

  • Q:A任务每周一跑一次,B任务依赖A任务,也希望跟A任务一样每周1跑一次怎么配置?

    A:B任务的时间属性跟A任务一模一样即可,即调度周期也要选择周调度 > 周一

  • Q:任务被删除,实例是否受影响?
    A:当一个任务运行一段时间后被删除时,由于调度系统每天会按时间属性为该任务生成对应的一个或多个实例,实例不会被删除。因此当这些实例在任务被删除了之后才被触发运行时,会由于找不到需要运行的代码而失败,报错信息如下所示。
    报错信息
  • Q:如何在每月的最后一天计算当月数据?

    A:目前系统不支持配置每月最后一天,因此如果时间周期选择每月31日,那么在有31日的月份会有一天调度,其他日期都是生成实例然后直接设为运行成功。

    需要统计每个月的数据时,建议选择每月的1日运行,计算上个月的数据。

  • Q:如何让一个依赖小时节点的天节点,到定时时间0点时自动运行?

    A:天节点依赖小时节点,不需要依赖今天的数据,只需要依赖昨天的小时数据(直接依赖今天的小时节点实例,会导致下游天节点实例到第二天才完成)。

    在天节点的调度配置界面,选择依赖上一周期 > 自定义,填入上游小时节点的节点ID,并重新提交发布。

  • Q:无法确定上游何时产出数据时,该怎么办?

    A:无法确定上游节点何时产出数据时,本节点可对上游做跨周期依赖。

  • Q:修改后的节点任务提交发布到生产环境后,是否会覆盖掉之前生产环境的错误节点?

    A:不会覆盖之前的节点,未运行的实例会用最新代码运行,不会删除已生成的节点实例。如果调度参数有变化,需要重新生成实例去运行。