实例生成方式:发布后即时生成实例

更新时间:
复制为 MD 格式

DataWorks周期调度节点配置生效默认采用T+1模式,即任务发布次日生成的实例为根据新发布的内容生成。如需让新发布或变更的任务在当天生效运行,可使用发布后即时生成模式。

工作原理

DataWorks中,对节点进行变更并执行提交(发布)操作后,新配置对实例生成的影响方式主要分为以下两种。这两种方式决定了变更是在当天立即生效,还是在下一个调度周期(次日)才生效。

方式A:T+1次日生成 (系统默认)

此方式为系统默认推荐选项,旨在通过将变更与当天的运行实例隔离,最大限度地保障当天生产环境的稳定性。

  • 运行原理
    发布操作在当天(T日)仅作为一次定义变更,不干预当天的实例运行。

  • 当天(T日)影响:

    • 行为:仅更新节点的代码与属性定义,不影响当天任何已生成或即将生成的实例。T日的所有实例仍将按照发布前的旧配置运行。

    • 建议:若希望新逻辑在当天对数据生效,建议在发布后手动对T日实例执行“补数据”操作。

  • 次日(T+1)影响:
    所有变更将在发布次日(T+1)的第一个周期实例开始,统一按新配置生成和运行。

方式B:发布后及时生成

此方式旨在让节点变更尽快在发布当天生效。其核心逻辑是:系统以“任务发布时间点”为基准,判断发布当天(T日)的周期实例应如何处理。

  • 运行原理
    系统会将T日每个周期实例的定时时间与“发布点 + 10分钟系统缓冲期”进行比较。

  • 定时时间 < 当前时间 + 10分钟

    • 现象:新任务-空跑,旧任务-不生成实例

    • 行为:对于从未提交过的新任务,该实例被视为“过期”,会变为空跑状态,不执行其内部的业务逻辑。防止在发布前的旧实例上错误地运行新代码;对于修改后重新提交的旧任务,已过期的实例不会生成。

  • 定时时间 > 发布时间 + 10分钟

    • 现象:正常执行

    • 行为:系统会立即根据新配置生成并执行该实例。

  • 次日(T+1)影响:
    发布次日(T+1)的所有周期实例,将全部基于新配置生成。

重要

为确保跨天调度逻辑的确定性,存在一个特殊的“跨天窗口期”(如图中的 23:30 - 24:00)。在此时间窗口内提交的发布,无论选择何种生效方式,其变更都将在 T+2 日 才开始生效。

image

使用限制

  • 变更生效时间:每日23:3024:00为系统批量生成实例的时间。在此期间提交的发布操作,其变更将在T+2生成的周期实例中生效。

  • 数据源变更限制:如果仅修改节点关联的数据源,即使选择发布后即时生成,当天已生成的周期实例也不会更新,仍会使用变更前的数据源执行。如需立即生效,需使用补数据功能。

发布后即时生成场景分析

发布后即时生成风险较高,使用不当可能导致依赖关系错乱、实例被意外删除或替换,影响当天任务的稳定性。

推荐场景

建议仅在以下场景谨慎使用:

  • 新建并需当天运行的节点:新建且无复杂上下游依赖的节点,需在发布后当天运行。

  • 替换已有实例:使用新配置替换当天已生成但尚未运行的周期实例。

高风险场景(不推荐)

不建议在以下场景使用此功能,否则可能导致当天依赖关系复杂化,甚至引发调度异常:

  • 修改已发布任务的调度配置:尤其是有复杂上下游依赖的任务。修改调度周期(如从天调度改为小时调度)并即时发布,可能导致部分旧实例被保留,部分新实例被创建,依赖关系错乱。

  • 上下游实例生成方式不一致:例如,上游节点使用T+1模式,而下游节点使用发布后即时生成。此操作会导致下游节点当天生成的实例找不到上游依赖,成为孤立节点且无法自动运行。

替代方案

对于修改已发布任务的场景,更安全的操作是:

  1. 使用默认的T+1模式发布任务。

  2. 发布成功后,对该任务执行补数据操作,手动触发当天需要运行的实例。

发布后即时生成场景实践

场景一:新建节点选择发布后即时生成实例

新节点发布后,其实例执行情况取决于定时时间与发布时间的关系(需考虑10分钟延迟)。

定时时间

实例状态与行为

晚于(发布时间 + 10分钟)

系统将生成一个可正常调度的周期实例,并在到达定时时间后执行。

早于或等于(发布时间 + 10分钟)

系统将生成一个实例状态为实时生成的过期实例。该实例为空跑状态,不会实际执行。

若需执行当天数据,可选择进行补数据操作,补业务时间昨天的数据。该操作生成实例时也会存在10分钟的时间差,详情请参见工作原理

image

示例:假设任务发布至生产环境的时间为12:00,则实时转实例生效时间点为12:10

  • 若任务的定时时间在12:10后,则任务将真实调度执行。

  • 若任务的定时时间在12:10前,则任务将空跑,其实例状态为实时生成的过期实例

场景二:更新已发布任务的调度周期

更新生产任务B的调度时间(即调度频率与定时时间),并将变更操作发布至生产环境,该任务当天周期实例可能会出现变更前与变更后的实例同时存在,因此,会导致任务当天的依赖关系比较复杂。

说明

此场景仅发生在实时转实例任务发布的当天,发布第二天任务会正常根据配置生成周期实例。

已发布的任务更新调度频率具体如下:

  • 任务的定时时间为未来时间

    DataWorks将根据最新调度配置替换已生成的未来时间段的实例。

  • 任务的定时时间为过去时间

    DataWorks会保留定时时间之前的实例,替换或删除定时时间之后的实例。

场景三:上下游任务实例生成方式不一致

若上下游均为新建节点,并且上下游任务的实例生成方式不一致。例如,上游选择T+1次日生成,下游选择发布后即时生成,则会导致产生场景:节点孤立。孤立节点不会自动调度运行,如果该孤立节点下游依赖较多,会导致下游任务均不能正常调度,对下游业务造成严重影响。实例生成方式不一致

场景四:变更上游任务调度时间,对下游依赖关系的影响

不同周期频率的上下游任务互相依赖的情况下修改调度时间,会按照上游节点最新的调度配置(天、月、小时依赖)来设置下游依赖。

说明

变更调度时间的生产任务,其下游实例会按照最新的调度配置,为新生成的实例和未替换的旧实例挂载依赖,小时、分钟各场景依赖情况,详情请参见必读:复杂依赖场景调度配置原则与示例。待发布的节点版本,其实例生成方式为发布后即时生成,且存在调度时间变更时,才会出现该场景。

示例场景如下:

  • 场景一:上游节点从每6小时调度一次,变更为每8小时调度一次(0:00,08:00,16:00),并且选择即时生成实例。场景一

  • 场景二:上游节点从每6小时调度一次,变更为每日16点调度一次,并且选择即时生成实例。场景二