若任务需要周期性调度运行,用户需定义该任务的调度相关属性,包括调度周期、调度依赖、调度参数等。

注意事项 & 功能说明

  • 已开启工作空间调度开关。仅当 DataWorks 工作空间开启启用调度周期开关后,工作空间中的任务才可以根据其配置自动调度运行。
  • 任务的调度配置仅用于定义任务调度运行时的相关属性,任务需通过发布流程发布至生产环境后,才会根据该配置进行最终调度。
  • 调度时间仅定义任务预期执行时间,其实际执行时间还受上游依赖执行情况控制。
  • DataWorks 支持多种类型任务互相依赖。
  • DataWorks 上,调度任务会根据调度类型及周期数生成相应的实例(例如,小时调度任务每天会根据周期数产生相应数量的小时实例),并通过周期实例的方式自动调度运行该任务。
  • 在使用调度参数的情况下,DataWorks 调度任务各周期代码入参由该周期对应的定时时间以及您调度参数表达式最终决定。

dataworks-schedule-15

配置项 说明
调度依赖 用于定义该任务的上下游依赖关系。通过依赖关系有序调度运行上下游节点,即当上游节点运行成功后,下游节点才会启动运行,保障适时的产出有效业务数据。您可使用自动解析快速设置节点依赖,也可手动设置节点的依赖关系。
  • 当节点为业务流程的根节点,或该节点无其他节点依赖时,若您希望快速发布调度任务,可选择设置该节点依赖工作空间根节点。
  • 当业务流程包含多个输入或多个输出,或工作空间业务较复杂时,可选择使用虚拟节点统筹管理业务流程。例如,通过虚拟节点来控制该业务流程的调度时间。
说明:
  • 当您的节点属于同一个业务流程时,也可通过业务流程面板,使用手动拉线方式设置各个节点的依赖关系。
  • 工作空间创建成功后,平台将自动生成一个工作空间根节点(即Root虚拟节点)。通常,您可将该节点作为整体调度业务流程运行的起始节点。
  • 该节点的命名格式为工作空间名称_root
  • 该节点会在工作空间创建成功后的第二天00:00点定时运行。
  • 该节点运行时会空跑(即平台直接返回运行成功,不会真实执行任务),不占用调度资源,不收取任何费用。
  • 配置调度依赖

    DataWorks 的调度依赖是指周期调度节点间的上下游依赖关系。通过节点的依赖关系有序调度运行上下游节点,即当上游节点运行成功后,下游节点才会启动运行,保障适时的产出有效业务数据。本文为您介绍调度依赖的配置指引,避免因调度依赖配置有误导致数据异常,配置前建议先了解此内容。

    调度依赖配置指引

    背景信息

    DataWorks 上任务的调度依赖是指调度场景下节点间的上下游依赖关系。在 DataWorks 中,上游节点任务运行完成且运行成功,下游节点任务才会开始运行。配置调度依赖后,可保障调度任务在运行时能获取到正确的数据(即当前节点依赖的上游节点成功运行后,DataWorks 通过节点的运行状态识别到上游表的最新数据已产生,下游节点再去取数),避免下游节点取数据时,上游表数据还未正常产出,导致下游节点取数出现问题。

    注意事项

    • 节点依赖关系配置后,默认在任务调度运行时,下游节点运行条件之一为其依赖的上游节点均已执行成功,否则当前任务取数会存在质量问题。
    • 任务实际运行时间除了取决于任务本身的定时时间(即任务在调度场景下的预期执行时间)外,还取决于上游任务的完成时间(即下游任务实际执行时间还取决于上游任务的定时时间)。若上游任务未完成运行,即便下游任务的定时时间早于上游任务,下游任务也不会运行。

    DataWorks 任务依赖最终是为了保障下游取数无误,实际是上下游表数据的血缘依赖。您可根据业务需求,选择是否需要基于表的血缘关系配置调度依赖。节点的调度依赖配置流程如下。

    Scheduling-dependencies-01

    方式一:自定义依赖关系

    若 DataWorks 上任务间不存在强血缘依赖(例如,不强依赖上游某个分区数据,仅取上游当前时间点最大分区数据),或依赖的数据非周期调度节点产出的表数据(例如,本地上传的表数据),则您可自定义节点的依赖关系。自定义依赖配置具体如下:

    • 依赖工作空间根节点

    例如,同步任务中的上游数据来源于其他业务数据库,SQL 类型任务对实时同步任务产出的表数据进行加工等场景,您可直接选择挂载依赖至工作空间根节点下。

    • 依赖虚拟节点

    当工作空间中业务流程较多或较复杂时,您可通过虚拟节点管理该业务流程,将需要统一管控的节点挂载依赖至某虚拟节点,使工作空间下数据流转路径更加清晰。例如,控制业务流程整体调度时间、控制业务流程整体调度与冻结(即不调度)。

    方式二:基于血缘配置依赖关系

    由于节点依赖关系配置后,默认节点的上下游产出表存在强依赖关系(即下游表数据的产出需要依赖上游产出的表数据),因此,任务在配置调度依赖时,需确认是否存在强血缘依赖,即确认当前任务是否会因为上游数据未产出而导致当前任务取数出现问题。若下游节点中表数据的产出,需依赖上游节点产出的表数据,则认为上下游节点的表存在强血缘依赖关系

    序号 目标 描述
    ①② 确认上下游表是否存在强血缘关系。 为避免当前任务执行时间不符合预期,您可先评估表之间是否存在强依赖血缘关系,确认是否需要基于血缘关系配置调度依赖。
    确认当前场景是否为周期调度任务产出的表数据。 不在 DataWorks 周期调度产出的表数据,DataWorks 无法通过任务运行情况监控数据产出,因此,部分表不支持配置调度依赖。
    ④⑤⑥ 基于血缘确认调度依赖的配置方式并配置调度依赖。 根据需要依赖上游昨天还是今天的数据、小时分钟任务是否要依赖自己上一个小时或分钟实例,来选择依赖上游同周期还是上一周期。
    ⑦⑧⑨ 预览依赖关系。 依赖关系配置完成后,可通过预览依赖、对比代码解析结果,查看周期任务确认配置时,发布前,发布生产后任务依赖关系是否符合预期。

    基于血缘配置调度依赖

    DataWorks 中,表血缘关系体现为产出表数据的节点间的依赖关系。在确认存在强血缘依赖后,您需要判断需要依赖上游昨天还是今天的数据、小时分钟任务是否要依赖自己上一个小时或分钟实例,来选择依赖上游同周期还是上一周期。

    调度依赖场景选择与配置

    在任务实际调度时,产出数据的代码中会使用调度参数来指定依赖哪个周期实例的数据,具体确认逻辑如下。

    说明:调度参数会根据任务调度的业务日期、定时时间及参数的取值格式自动替换为具体的值,实现在任务调度时间内参数的动态替换,进而实现任务查询与产出的表分区变更。

    Scheduling-dependencies-02

    基于表血缘选择调度依赖方式的步骤如下:

    • 确认表的血缘关系

    为保障任务调度产出的表数据符合预期,您需明确上下游表当天产出的业务数据,确保下游表当天获取的数据为上游表当天的产出数据。

  • 若为小时、分钟周期调度任务,则需明确每个小时、分钟周期实例产出的表分区数据。
  • 若无法看到上游调度参数配置(例如,依赖其他空间下的表场景),如何确认表血缘,可参见确认表血缘
    • 基于血缘选择调度依赖的配置方式

    明确表血缘后,您可根据血缘关系确定调度依赖的配置方式(即同周期依赖还是依赖上一周期)

    调度依赖配置方式 血缘关系
    配置同周期调度依赖 下游依赖上游今天产出的表数据。
    配置依赖上一周期(跨周期依赖)
  • 下游依赖上游昨天产出的表数据。
  • 小时、分钟任务特殊依赖场景:
  • 依赖自己上一个小时或分钟的周期实例数据,可设置跨周期依赖(即依赖上一周期:本节点(自依赖))。
  • 小时任务依赖小时任务,如果上下游的定时时间完全相同,设置跨周期依赖可以实现下游2点的实例依赖上游1点的实例。分钟任务依赖分钟任务,原理相同。
  • 不支持配置依赖的场景

    DataWorks 的调度依赖主要用于保障周期调度节点定时更新的表数据,确保下游节点取数无误。因此,不在 DataWorks 上通过调度节点更新的表,DataWorks 无法直接监控。非 DataWorks 周期性调度产出数据的表包括但不限于以下几类:

    • 实时同步产出的表
    • 从本地上传到 DataWorks 的表
    • 维表
    • 手动任务产出的表
    • 非 DataWorks 上调度节点产出的周期性变更的表

    调度依赖关系确认

    调度依赖配置后,您可通过以下方式确认依赖关系是否正常。

    确认方式 说明
    配置时:预览依赖
  • 用于提前预览节点当前配置的调度依赖是否符合预期。
  • DataWorks 支持 分钟、小时、日、周、月、年 等类型的调度任务互相依赖,调度类型不同,任务执行的周期数不同。
  • 任务各周期是通过实例的方式执行,当上下游调度依赖的类型不同时,其实例依赖情况不同。例如,天任务依赖小时任务,小时任务依赖分钟任务,或存在跨周期依赖的场景,可使用此功能保障任务满足预期运行时间,避免由于依赖关系不符合预期导致任务延迟。
  • 提交时:代码解析结果对比
  • 用于提交节点时,确认当前版本节点依赖变更是否符合预期,及变更对生产的影响。
  • 开启自动解析时,为保障生产数据正常产出,您需要在提交节点时,对节点调度变更的相关操作进行二次确认。可使用该功能保障依赖变更不影响生产任务数据产出。
  • 发布后:查看周期任务 用于节点发布后,在运维中心确认生产调度任务的依赖是否符合预期。
  • 确认生产任务的调度依赖
  • 标准模式工作空间下,节点依赖关系在开发环境和生产环境依赖可以不一致。生产环境节点的调度依赖需在数据开发界面配置,并且完成发布后才会生效。
  • 节点发布后,您可进入运维中心的周期任务界面,展开当前任务上下游,查看调度依赖情况。
  • 重要:周期任务界面均展示节点在生产环境的最新状态,但周期实例是否存在新加或删除的依赖,与所选实例生成方式有关。
  • 确认生产任务的数据情况
  • 调度依赖确认无误后,您还需确认上下游节点的分区数据读取与写入情况(即调度参数配置是否正确)。避免上游节点产出的数据非当前节点所依赖的数据,导致下游节点出现数据质量问题。
  • 说明:若任务发布流程中存在流程管控,建议在任务发布后,进入生产运维中心的周期任务界面,查看任务调度依赖及相关属性,若发现任务不符合预期,请确认任务的发布流程是否被阻塞。

    常见问题

    以下为典型场景说明,更多调度依赖的常见问题,请参见依赖关系

  • 节点唯一性相关
  • 开发环境与生产环境节点形态不同但节点唯一:同一节点在开发环境和生产环境中的调度依赖配置可以不同,即同一个节点在开发环境和生产环境可以拥有两种不同的形态,但节点唯一。
  • 下线节点前需在开发环境与生产环境同时移除下游依赖:由于节点唯一性,为保障下游任务取数及运行无误,DataWorks 在下线上游任务前,需先在下游节点调度移除,然后重新配置下游节点需要依赖的上游节点,并提交发布。确保开发环境及生产环境该依赖都被移除后,才可下线上游任务。
  • 与实例生成方式相关
  • 新建节点时,请确保上下游节点的实例生成方式相同,避免因为实例生成方式不同,上游节点当天生成实例,下游节点隔天生成实例,导致下游实例变为场景:节点孤立
  • 变更已存在节点的调度周期,并且选择发布后及时生成实例时,修改节点的调度依赖时,已生成的实例不会自动删除,节点发布后当天周期实例的依赖情况会比较奇怪,详情请参见实时转实例对当天周期实例依赖关系的影响
  • 配置同周期调度依赖

    依赖某节点同周期指本节点本周期运行,依赖上游节点当前周期的数据产出情况(即任务执行情况),待上游当前周期实例执行成功后,本节点才会运行。通常,若当前任务需依赖上游任务同周期产出的表数据时,可为当前任务设置依赖该上游任务的同周期任务。DataWorks 提供多种同周期依赖配置方式,并支持依赖预览功能,您可及时查看并调整有误依赖,保障任务调度符合预期。本文为您介绍同周期依赖的注意事项、配置原理、配置方式等内容。

    注意事项

    • 同周期依赖在 DataWorks 的 DAG 图中以实线的形式展示
    • 部分复杂场景下,当同周期依赖不满足预期时,您可设置跨周期依赖。例如,天任务依赖小时任务的场景下,天任务默认依赖小时任务当天所有实例。您可通过小时任务自依赖,实现天任务依赖小时任务指定周期。
    • 为避免生产调度任务由于依赖关系不符合预期导致生产调度延迟,建议在发布任务前,通过预览依赖功能确认各周期实例关系是否符合预期。

    配置原则

    为提升任务开发效率,建议您在实际开发中使用自动解析功能快速为节点设置依赖关系。基于自动解析进行实际开发时,请遵循以下原则:

    • 节点创建:建议节点名称与节点产出表名称一致。
    • 代码开发:避免多个节点写入数据至同一张表。
    • 依赖配置:建议将节点产出表配置为节点的输出。


    说明:
    若上游输出节点名称与节点产出表名称不一致,会导致依赖的上游节点不准确,此时可取消自动解析

    配置入口及配置说明

    进入数据开发节点的编辑页面,单击右侧导航栏的调度配置,在调度依赖区域配置节点的依赖关系。

    配置节点同周期依赖关系时,需在依赖的上游节点区域,定义当前任务需要依赖哪些上游任务;在本节点输出名称区域,定义其他任务可通过本节点的哪些节点输出挂载当前节点的依赖关系。

    Scheduling-dependencies-08

    • 依赖的上游节点

    用于定义本节点的上游节点,依赖配置后,上游节点运行成功后本节点才具备运行条件。此处需填写上游节点的节点输出,作为本节点的输入。配置依赖的上游节点时请注意:

  • 所有节点都需要配置依赖的上游节点:建议根据表血缘关系配置,若无表血缘关系,可基于业务需求选择依赖工作空间根节点或虚拟节点。
  • 请确保依赖的上游节点已提交:提交任务时,若报错依赖的上游节点输出不存在,请确保需依赖的上游节点已提交。

  • 配置方式如下图。

    Scheduling-dependencies-09

    当使用自动推荐(方式三)功能设置上游依赖时,需确保要依赖的上游任务已提交发布至生产环境,并真实产出该表数据。被推荐的节点需在前一天提交至调度系统,待第二天数据产出后,才可被自动推荐功能识别。因此,自动推荐的节点存在 T+1 的延迟。

    • 本节点输出

    本节点的输出是其他节点与本节点建立依赖关系的媒介。其他节点可通过本节点的输出名称找到本节点,并通过调度依赖配置,将本节点设置为他的上游节点。下游节点设置当前节点依赖后,待下游节点提交完成,当前节点对应的节点输出将展示该下游节点名称。DataWorks 不支持手动在节点输出界面编辑下游节点。

    配置方式如下图。

    Scheduling-dependencies-10


    重要:
    若工作空间已存在同名节点,可能导致节点输出同名而提交失败。

    配置原理

    调度依赖配置是将上游节点的输出作为下游节点的输入,形成节点依赖,建议您根据节点查询及写入的表血缘设置节点的调度依赖关系。配置完成后,上游节点运行完成且运行成功,下游节点才会启动运行,保障调度任务在运行时能取到正确的数据。

    Scheduling-dependencies-11

    配置方式

    • 通过业务流程面板拉线设置节点依赖

    在业务流程面板使用拉线方式设置依赖关系时,DataWorks 将自动为下游节点添加上游节点 _out 格式的输出,形成节点依赖。

    • 通过调度配置界面手动添加上游节点依赖

    在调度配置界面,通过输入某节点的节点输出,手动添加依赖的上游节点,格式为 projectname.tablename

    • 通过自动解析功能基于表血缘设置节点依赖

    后续:确认依赖是否符合预期

    配置完成后,为保障任务调度符合预期,您可通过以下操作验证配置是否正确:

    • 预览依赖:避免依赖关系不符合预期导致任务调度延迟。
    • 提交检查:提交节点时确认依赖变更是否符合预期。
    • 周期任务依赖确认:节点发布后,需在运维中心确认生产调度任务的依赖是否符合预期。周期任务为生产环境该任务的最新状态,同时,周期实例的实例依赖关系与实例生成方式有关。

    删除或变更节点输出的影响

    当节点产出的表数据变更导致节点输出的变更,或直接手动修改节点输出时,请注意以下内容:

  • 删除节点输出对节点产出的表数据无直接影响。
  • 若节点输出已存在下游依赖,此时变更或删除可能会对下游任务产生严重影响。
  • 节点产出表删除:当自动解析的节点输出,由于节点产出表变更导致节点输出变更时,可能会导致下游变为孤立节点不被调度,或由于下游任务缺少数据依赖导致下游被数据污染。
  • 节点产出表变更:若当前节点产出的表需转移至其他节点,请参考删除或变更节点输出的影响进行操作。
  • 配置依赖上一周期(跨周期依赖)

    依赖上一周期指本节点本次实例运行,依赖相应节点上一周期实例的运行情况,待上一周期实例运行成功后,本节点才会运行。通常,若本节点需依赖上游昨天产出的数据,或小时、分钟任务依赖自己上一小时或分钟实例,可设置跨周期依赖。本文为您介绍跨周期依赖的配置及依赖形式。

    注意事项

    配置依赖上一周期的注意事项如下。

    类别 描述
    跨周期依赖图例展示 跨周期依赖在 DataWorks 的 DAG 图中以虚线的形式展示。
    已设置跨周期依赖某节点时,请确认是否还存在并需要同周期依赖 配置依赖关系后,下游依赖的所有上游任务均需执行完成,下游任务才会执行。
    由于同周期依赖自动解析功能默认开启,若已设置跨周期依赖,请确认是否还需设置同周期依赖,若不需要,则需删除同周期自动解析产生的依赖关系,以免影响下游正常运行。
    复杂场景是否需设置跨周期依赖 部分场景下,当同周期依赖不满足预期时,您可设置跨周期依赖。
    例如,天任务依赖小时任务的场景下,天任务默认依赖小时任务当天所有实例。您可通过小时任务自依赖,实现天任务依赖小时任务指定周期。
    预览节点依赖关系 为避免生产调度任务由于依赖关系不符合预期导致生产调度延迟,建议在发布任务前,通过该功能确认各周期实例关系是否符合预期。
    任务发布说明 跨周期依赖的上下游任务,请确保均已发布至生产环境,发布后才可在生产环境运维中心查看该环境的依赖关系。

    配置入口

    进入数据开发节点的编辑页面,单击右侧导航栏的调度配置,在调度依赖 > 上一周期区域配置节点的依赖关系。

    依赖形式

    依赖上一周期支持的依赖形式如下表所示。

    依赖形式 节点依赖关系 业务场景
    依赖上一周期:本节点(自依赖) 本节点本次实例运行,依赖于本节点上一周期的实例运行结果。即本次节点是否运行,取决于本节点上一周期的实例是否运行成功。 本节点本次实例运行,取决于本节点上一周期业务数据的产出情况。
    依赖上一周期:一级子节点 本节点本次实例运行,取决于下游节点上一周期的实例运行情况。即本次节点是否运行,取决于该节点的下游节点在上一周期的实例是否运行成功。 本节点本次实例的运行,依赖于该节点的下游节点在上一周期对本节点上一周期结果表(即本节点输出表)数据的清洗结果是否成功。
    依赖上一周期:其他节点 本节点本次实例的运行,依赖于其他节点在上一周期的实例运行结果。即本次节点是否运行,取决于其依赖的其他节点在上一周期实例是否运行成功。 本节点本次实例运行,在业务逻辑上需要依赖其它业务的数据,但本节点中不包含涉及其他业务数据的相关操作。

    依赖上一周期:本节点(自依赖)

    本节点本次实例运行,取决于本节点上一周期业务数据的产出情况。任务的依赖设置及依赖关系示例如下。

    Scheduling-dependencies-12

    当天任务依赖小时、分钟任务时,小时、分钟任务是否设置自依赖,会影响天任务的执行时间:

    • 小时、分钟任务未设置自依赖

    天任务默认依赖小时、分钟任务当天所有的实例,即天任务会对小时、分钟任务当天产出的所有表数据进行汇总加工。

    • 小时、分钟任务设置自依赖

    天任务根据挂载依赖:就近原则,挂载距离自己定时时间最近的某个小时、分钟实例,而非依赖当天所有小时、分钟实例。

    依赖上一周期:一级子节点

    本节点本次实例运行,依赖其下游节点上一周期对本节点上一周期表数据的加工结果

    例如:节点 C 包含 A、B 两个下游节点,依赖一级子节点是指节点 C 依赖 A、B 两个节点在上一周期的运行结果(图中示例当前周期为 T,上一周期为 T-1)。当 A、B 两个节点上一周期均运行成功时,本次节点 C 才会启动运行。

    Scheduling-dependencies-13

    依赖上一周期:其他节点

    本次节点是否运行,取决于其他节点在上一周期实例是否运行成功

    Scheduling-dependencies-14

    是否沿用上游的空跑属性

    需要实际配置场景。

    必读:复杂依赖场景调度配置原则与示例

    DataWorks 支持分钟、小时、日、周、月、年等类型的调度任务互相依赖,调度类型不同,任务执行的周期数不同。任务各周期是通过实例的方式执行,当上下游调度依赖的类型不同时,您可通过该文档了解上下游各周期实例如何挂载依赖,即上下游任务不同周期实例的依赖情况。

    背景信息

    挂载依赖:就近原则

    依赖关系对任务执行的影响

    重点:复杂依赖场景汇总

    不同周期任务的细分依赖场景及其运行情况如下。

    说明:
  • 下游任务的定时运行时间若早于上游任务,即便到达下游任务的定时时间,该任务也不会被调度,需等待上游任务运行完成后才会调度运行。
  • 根据就近原则挂载依赖时,对于下游任务当天的第一个实例,如果上游没有比它更早的实例,则下游默认依赖上游当天的第一个实例。

  • 小时任务依赖其他任务

    细分场景 依赖及运行说明 示意图
    小时任务依赖小时任务
  • 上下游周期数(即生成的实例数)一致
  • 上下游任务运行当天生成的周期实例,将一一对应挂载依赖。即下游首个实例依赖上游首个实例,下游第二个实例依赖上游第二个实例,以此类推。
  • 上下游周期数(即生成的实例数)不一致
  • 上下游任务运行当天生成的周期实例,将根据就近原则挂载依赖,依赖距离自己定时运行时间最近(在当前实例定时时间之前,或与当前实例定时时间一致)的上游实例。
    说明:当上游周期数小于下游周期数时,下游多个周期实例可能会依赖同一个上游周期实例。
    小时任务依赖小时任务
    小时任务依赖小时任务
  • 小时任务未设置自依赖
  • 上下游任务运行当天生成的周期实例,将一一对应挂载依赖。即下游首个实例依赖上游首个实例,下游第二个实例依赖上游第二个实例,以此类推。
  • 小时任务设置自依赖
  • 上下游任务运行当天生成的周期实例,将根据就近原则挂载依赖,依赖距离自己定时运行时间最近(在当前实例定时时间之前,或与当前实例定时时间一致)的上游实例。
    说明:当上游周期数小于下游周期数时,下游多个周期实例可能会依赖同一个上游周期实例。
    小时任务依赖小时任务
    小时任务依赖分钟任务
  • 分钟任务不设置自依赖
  • 下游小时任务依赖该小时内上游分钟任务生成的所有分钟周期实例。
  • 分钟任务与小时任务均设自依赖
  • 下游小时任务依赖该小时内距离自己定时运行时间最近(在当前实例定时时间之前,或与当前实例定时时间一致)的上游分钟周期实例。
    小时任务依赖分钟任务

    天任务依赖其他任务

    细分场景 依赖及运行说明 示意图
    天任务依赖同周期天任务
  • 上游天任务未设置自依赖
  • 默认下游天任务的周期实例挂载依赖至同周期的上游天任务周期实例。
  • 上游天任务设置自依赖
  • 上游天任务设置自依赖,下游天任务依赖上游天任务时存在跨周期依赖。
    说明: 自依赖(即依赖上一周期:本节点(自依赖))会跨天依赖,当昨天最后一个周期实例未运行完成,会导致今天的任务无法调度。
    小时任务依赖小时任务
    天任务依赖当天小时任务
  • 小时任务未设置自依赖
  • 上下游任务运行当天生成的周期实例,将一一对应挂载依赖。即下游首个实例依赖上游首个实例,下游第二个实例依赖上游第二个实例,以此类推。
  • 小时任务设置自依赖
  • 上下游任务运行当天生成的周期实例,将根据就近原则挂载依赖,依赖距离自己定时运行时间最近(在当前实例定时时间之前,或与当前实例定时时间一致)的上游实例。
    说明:当上游周期数小于下游周期数时,下游多个周期实例可能会依赖同一个上游周期实例。
    小时任务依赖小时任务
    天任务依赖昨天的小时或分钟任务
  • 分钟任务不设置自依赖
  • 下游小时任务依赖该小时内上游分钟任务生成的所有分钟周期实例。
  • 分钟任务与小时任务均设自依赖
  • 下游小时任务依赖该小时内距离自己定时运行时间最近(在当前实例定时时间之前,或与当前实例定时时间一致)的上游分钟周期实例。
    小时任务依赖分钟任务

    分钟任务依赖其他任务

    其他任务依赖周、月、年任务

    场景:节点成环

    什么是节点成环?

    节点成环指的是某节点为上游节点但又同时依赖了自己的下游节点,导致依赖关系成环,这类型节点在自动调度时不会被调起。生产环境若出现成环节点会自动报警,成环节点报警机制。

    节点成环产生原因与解决方案

    当某节点为上游节点但又同时依赖了自己的下游节点,导致依赖关系成环,您需要分析业务流程,及时去除成环依赖。

    例如,当下游节点依赖某上游节点上一周期产出的表数据,并且将加工结果写回该表时,若下游节点依赖上游节点同周期而非上一周期时,将导致上下游节点依赖关系成环。请明确业务场景后,将下游节点从依赖上游同周期转变为依赖上一周期。

    • 场景示例: 如下图场景,若上游节点 A 查询表 C 数据并产出表 A 数据,下游节点 B 对表 A 数据进行清洗写入表 B,紧接着节点 C 对表 B 数据进行清洗又重新写回表 C,这种情况下自动解析会生成环。
    • 解决方案: 分析业务流程,去除成环依赖。如下图案例,如果下游表要对上游表上周期数据进行清洗,则设置下跨周期,A 节点应该跨周期依赖 C 节点。

    成环节点的监控报警

    为保障周期任务可以正常产生周期实例并且自动调度运行,DataWorks 内置了报警规则来对周期任务进行定期监控扫描,如有异常便会自动报警。节点成环后会自动报警,如果收到节点成环报警请及时处理。

    说明:
  • DataWorks 每天定时 9 点、12 点、16 点、20 点和 22 点对周期任务状态进行扫描,如有异常将会自动发送报警。扫描时间点前 10 分钟内产生的异常不会纳入本次扫描,该异常将会被纳入下一个周期的任务状态进行扫描。
  • 节点成环报警为系统内置报警规则,您无须手动新建,默认以短信、邮件的方式报警给节点责任人。但您可以在规则管理页面中针对全局规则修改报警接收人。
  • 场景:节点孤立

    什么是孤立节点?

    孤立节点指节点在周期任务或周期实例处展开父节点时,没有依赖任何父节点,这类型节点在自动调度时不会被调起,所以孤立节点不会自动调度运行,如果该孤立节点下游依赖较多,可能会造成比较严重的后果。孤立节点产生后会自动报警,如果收到孤立节点告警请及时处理。孤立节点报警机制,详情请参见孤立节点监控报警

    说明:在 DataWorks 上,除了工作空间根节点外,自定义的每个周期调度的节点都需要有父节点依赖才可以被正常调度运行。

    如何处理孤立节点?

    孤立节点监控报警

    典型应用场景案例

    场景1:包含离线同步节点的业务流程,如何配置调度依赖

    DataWorks 的离线同步节点不支持通过自动解析自动添加调度依赖,包含离线同步节点的业务流程,如果下游节点依赖离线同步节点产生的表,您需手动添加产出表到离线同步节点的输出中,下游节点查询离线同步节点数据时,自动解析可以通过表快速找到产出该表数据的离线同步节点。

    易错点

    如果您没有将离线同步节点的产出表手动添加到离线同步节点的输出中,自动解析无法找到此离线同步节点,提交引用此离线同步节点的 SQL 节点时,会出现如下错误提示。

    配置方法1:手动将离线节点产出表添加为本节点产出

    配置方法2:离线节点名称与产出表名称保持一致

    易错原因详解

    包含离线同步节点的业务流程,以下图为例,常见节点创建和依赖配置操作如下:

    场景2:依赖上一周期的结果时,如何配置调度依赖

    依赖上一周期是指依赖某个节点的上一周期实例,即跨周期依赖某节点上一周期实例是否正常执行。

    DataWorks 支持以下三种跨周期依赖形式:

    依赖上一周期和依赖本周期的区别:在运维中心中查看节点依赖关系时,所有跨周期依赖的节点都会以虚线的形式展示。

    跨周期依赖的典型场景

  • 实时场景一:
  • 场景描述:天任务依赖小时任务,但不想等24个小时任务实例运行结束才运行天任务,希望天任务能够在定时时间12:00时运行。
  • 解决方案:上游小时任务配置为依赖上一周期 > 本节点,设置下游天任务的定时调度时间为12:00,且天任务无需设置跨周期依赖。待上游小时任务定时时间12点的实例运行成功后,下游天任务便会运行。
  • 实时场景二:
  • 实时场景:天任务依赖小时任务昨天的数据。
  • 解决方案:下游天任务配置为依赖上一周期 > 自定义,输入上游小时任务的 ID。
  • 实时场景三:
  • 实时场景:小时任务依赖天任务,当上游天任务运行结束,下游小时任务多个周期定时时间已到,导致小时任务多周期并发调起,该如何处理?
  • 解决方案:下游小时任务配置为依赖上一周期 > 本节点。
  • 实时场景四:
  • 实时场景:本节点依赖自己上一周期产出的数据,如何确认上一周期产出的时间?
  • 解决方案:本节点配置为依赖上一周期 > 本节点。
  • 场景3:如何配置跨业务流程、跨工作空间的调度依赖

    本文为您介绍跨业务流程、跨工作空间场景下,如何设置节点的调度依赖。并通过该方案实现下游业务流程等待上游业务流程执行成功后,才可执行。

    背景信息

    DataWorks 上游节点的输出作为下游节点的输出可形成节点依赖关系,基于该特性,可实现跨业务流程依赖,跨工作空间依赖。

    跨业务流程配置调度依赖

    下游业务流程中的节点依赖上游业务流程中某节点的节点输出即可实现跨业务流程依赖,下面以多分支结果的业务流程实现跨业务流程依赖为例说明如何设置跨业务流程节点依赖关系。

    包含多个分支结果的业务流程如果要实现跨业务流程依赖,您需要使用虚拟节点对多个分支节点进行汇总,再手动将该汇总节点的输出作为下游业务流程统筹根节点的输入,以此方式实现跨业务流程依赖。

    当包含多个分支结果的业务流程需要实现跨业务流程依赖时,则可以使用虚拟节点配置上下游依赖关系。示例如下。

    Scheduling-dependencies-37

  • 创建两个业务流程:业务流程 1、业务流程 2,业务流程 1 作为业务流程 2 的上游。
  • 上游业务流程 1 创建如下虚拟节点。
  • 业务流程1_start_虚拟节点:统筹起始节点,作为上游业务流程 1 中多分支节点的统筹起始节点。
  • 业务流程1_end_虚拟节点:汇总输出节点,用于对上游业务流程 1 的多分支节点进行汇总输出。
  • 下游业务流程 2 创建如下虚拟节点。
  • 业务流程2_start_虚拟节点:统筹起始节点,下游业务流程 2 中多分支节点的统筹起始节点
  • 业务流程2_end_虚拟节点:汇总输出节点,用于对下游业务流程 2 的多分支节点进行汇总输出。
  • 上下游业务流程的依赖关系:配置业务流程1_end_虚拟节点的输出作为业务流程2_start_虚拟节点的输入,从而实现跨业务流程调度依赖。
  • 跨工作空间配置调度依赖

    DataWorks 支持同区域下的工作空间进行跨工作空间依赖,根据调度依赖原理,通过将上游节点的输出作为下游节点的输入,以此形成节点依赖,实现跨工作空间的调度依赖。例如,将工作空间 A 中节点 A 的输出添加为工作空间 B 中节点 B 的输入,即可实现跨工作空间依赖。配置方法与通用场景的调度依赖配置相同

    附录

    确认表血缘

    任务配置上下游节点依赖前,您需先确认当前节点的表血缘关系(例如,表数据间的血缘关系、表产出的分区数据),基于血缘关系配置节点的调度依赖。本文为您介绍如何确认表血缘,以及未基于表血缘配置节点依赖的影响。

    背景信息

    确认表血缘,以及未基于表血缘配置节点依赖的影响,说明如下表。

    类别 说明
    确认表血缘 依赖同工作空间的表数据:通过上下游节点参数配置及实例替换情况,确认上游每日产出的分区数据。
    依赖跨工作空间的表数据:通过数据地图产出信息确认上游表每日产出的分区数据。
    未基于表血缘配置节点依赖的影响 存在血缘依赖关系但未设置节点依赖关系,导致下游取数出现问题。
    存在血缘依赖且设置了节点依赖但依赖的时间有误,导致下游取数出现问题。

    使用说明

    DataWorks 上,节点读取或产出的表分区均通过调度参数实现。若上游节点产出的表分区值与下游节点依赖的表分区不匹配,您可根据业务需要综合考量,是否需要修改节点的调度参数配置,以此方式实现节点产出的表分区与节点依赖的表分区数据相匹配。

    若需依赖上游节点上一周期产出的表分区数据,您可考虑设置跨周期依赖,即本节点依赖上一周期该上游节点。

    说明:分区表场景下,需保证上游节点产出的表分区为下游节点所需依赖的表分区数据。

    确认表血缘

    同空间下确认上游表血缘

    节点周期写入某张表某个分区的数据,大部分场景都是采用调度参数来动态实现,您可参考调度参数,了解调度参数的替换原理。若您需要依赖同工作空间某节点,则可检查其调度参数的配置情况。

    可在 运维中心 > 调度实例 下确认上下游表数据产出。

    Scheduling-dependencies-30

    跨空间依赖确认上游表血缘

    若您需依赖其他工作空间的节点,可通过数据地图确认表数据每日写入情况。例如:确认上游该节点每日写入的表分区为昨天还是今天。

    Scheduling-dependencies-31

    未基于表血缘配置节点依赖的影响

    场景一:存在强血缘依赖但未设置节点依赖,导致下游取数出现问题

    若当前节点 Job_B 代码中配置了依赖 A 表的数据,但未将产出 A 表数据的节点 Job_A 作为当前节点依赖的上游,则可能会出现 A 表数据未产出,当前节点便开始执行,最终导致 Job_B 节点产出的表数据出现问题。

    Scheduling-dependencies-32

    虽然 Job_A 的定时时间早于 Job_B ,若 Job_A 无法在 2 点前完成数据产出,将导致 Job_B 取数出现问题。Job_A 定时时间 1 点未产出数据的可能原因如下:

    • Job_A 的上游节点运行出错,或执行变慢。
    • Job_A 及其上游节点出现等待资源情况。
    • job_A 的上游节点某天被冻结。

    场景二:设置了调度依赖,但由于参数配置导致下游取上游表数据早于上游表数据产出

    同周期依赖配置情况下,由于上游产出的表分区与下游取表数据的分区匹配不上,可能会导致下游取数出现质量问题,或下游任务报错。如下图所示。

    Scheduling-dependencies-33

    说明:MaxCompute 节点使用 max_pt 函数时,请确认上游表数据每日产出无误。

    预览依赖关系

    调度依赖配置完成后,您可通过预览依赖查看周期任务的上下游依赖关系、查看周期任务在调度日内所生成周期实例的预计执行时间,检查任务的调度依赖配置是否符合预期,保障任务可按预期时间正常运行。若不符合预期请及时调整调度依赖配置,避免由于依赖关系不符合预期导致任务运行延迟。

    注意事项

    • 上下游节点的周期数不同,各周期的依赖关系不同。为避免配置的依赖关系不符合预期,在任务发布前,建议上下游调度周期数与定时时间不一致场景下,使用该功能提前预览实例的依赖情况。
    • 目前仅支持查看当前节点的一级上游和一级下游依赖关系。
    • 为确保当前任务依赖关系正确,请确认上游节点为已保存状态。
    • 依赖预览图示中,实线表示同周期依赖,虚线表示跨周期依赖(即依赖上一周期)。

    预览依赖图示说明

    DataWorks支持通过不聚合、按所属工作空间聚合、按责任人聚合等方式呈现依赖关系,您可根据需要选择使用。聚合方式介绍详情请参见附录:DAG 图功能介绍。

    下图以预览节点依赖为例,为您展示不同聚合方式的呈现效果。

    Scheduling-dependencies-34

    预览节点依赖

    DataWorks 根据节点的依赖配置,为您生成上下游节点的依赖关系图,您可基于该图检查调度依赖配置是否符合预期。

    Scheduling-dependencies-35

    预览实例依赖

    若在一个调度日内,您的周期任务会产生多个周期实例,DataWorks 会根据该节点的依赖配置和时间配置,为您生成所有周期实例的上下游依赖关系及计划执行时间,您可确认各周期实例依赖及执行时间是否符合预期。

    Scheduling-dependencies-36

    代码解析结果对比

    删除或变更节点输出的影响

    各类型节点自动解析场景

    调度配置最佳实践

    配置调度依赖时,需要根据本节点输出名称作为关联项来给任务间设置依赖关系。本文将为您介绍如何配置任务调度依赖的输入输出。

    设置调度依赖最佳实践

    配置任务的本节点输入

    您可以通过以下两种方式配置本节点输入:

    • 使用代码自动解析功能,解析出任务的依赖。
    • 手动输入任务依赖(手动输入父节点的的输出名称)。

    Scheduling-dependencies-21

    说明:手动输入上游节点时,输入的是父节点的输出名称。如果父节点的任务名称和父节点的输出名称不一致,请务必正确输入本节点输出名称。

    配置上游节点时,如果自动解析出来的上游节点是一个无效的上游依赖。您可以查看解析出来的上游依赖在父节点ID一列是否显示有值,来识别设置的依赖是否有效。

    配置任务依赖实质上是给两个节点设置依赖关系。只有真实存在的节点,才能够设置有效的依赖关系。

    无效的上游依赖

    无效的上游依赖通常有以下两种情况:

    • 父节点不存在。

    Scheduling-dependencies-22

    • 父节点输出不存在。

    Scheduling-dependencies-23

    通常由于解析出来的父节点输出名称不存在,会导致上游依赖无效。本示例中,由于表 project_b_name.pm_table_b 没有产出任务,或该表产出任务的本节点输出的配置不正确,导致无法解析出来。

    您可以通过以下两种方案解决该问题:

    • 确认该表是否有产出任务。
    • 确认该表产出任务的本节点输出名称,将该本节点的输出名称手动输入到依赖的上游节点中。

    说明:手动输入上游节点时,输入的是父节点的输出名称。如果父节点的任务名称和父节点的输出名称不一致,请务必正确输入本节点输出名称。 例如,上游节点 A 的节点输出名称是 A1,下游节点 B 需要依赖 A,此时应该在依赖上游节点的输入框中输入 A1,并单击右侧的加号进行添加。

    配置上游依赖

    如果您的表不存在上游,您可以通过单击使用工作空间根节点获得上游依赖。

    Scheduling-dependencies-24

    配置任务的本节点输出

    本节点名称、本节点输出名称和本节点输出表名共用同一个名称,可以高效配置本节点输出。

    • 能够快速地知道该任务操作的是哪个表。
    • 能够快速知道该任务失败后造成的影响范围有多大。
    • 使用自动解析配置任务依赖时,只要本节点输出符合三名合一的规则,即可提升自动解析的精准性能。

    自动解析

    自动解析:通过代码自动解析调度依赖关系。

    自动解析的实现原理:代码中只能拿到表名,自动解析功能可以根据表名解析出对应的产出任务。

    类型节点代码如下所示。

    INSERT OVERWRITE TABLE pm_table_a SELECT * FROM project_b_name.pm_table_b ;
    

    解析出来的依赖关系如下。

    Scheduling-dependencies-25

    DataWorks 会自动解析本节点,即依赖 project_b_name 产出 pm_table_b 的节点,同时本节点最终产出 pm_table_a ,因此父节点输出名称为 project_b_name.pm_table_b,本节点的输出名称为 project_name.pm_table_a(本工作空间名称为 test_pm_01)。

    • 如果您不想使用从代码解析到的依赖,则选择
    • 如果代码中有很多表是临时表:如t_开头的表为临时表。则该表不会被解析为调度依赖。可以通过项目配置,定义以什么形式开头的表为临时表。
    • 如果代码中的一个表,既是产出表又是被引用表(被依赖表),则解析时只解析为产出表。
    • 如果代码中的一个表,被多次引用或者被多次产出,则解析时只解析一个调度依赖关系。

    说明:默认情况下,表名为t_开头的会被当成临时表,自动解析不解析临时表。如果 t_开头不是临时表,请联系自己的项目管理员到工作空间配置页面进行修改。

    Scheduling-dependencies-26

    删除某表的输入输出

    您在进行数据开发时,经常会用到静态表(数据通过本地文件上传到表中),这部分静态数据没有产出任务。

    配置依赖时,您需要删除静态表的输入:如果静态表不满足t_的格式,不会被处理为临时表,此时您需要删除静态表的输入。

    您在代码中右键单击表名,选择删除输入

    Scheduling-dependencies-27

    如果您是从 DataWorksV1.0 升级至 DataWorks V2.0 的用户,则您迁移过来的 DataWorks 任务的本节点输出默认为 工作空间名.节点名

    Scheduling-dependencies-28

    注意事项

    当任务依赖配置完成后,提交的窗口会有一个选项:当输入输出和代码血缘分析不匹配时,是否确认继续执行提交操作。

    该选项的前提是您已经确认依赖关系正确。如果不能确认,则可以按照上述方法确认依赖关系。

    Scheduling-dependencies-29

    确认依赖关系无误后,直接勾选我确认继续执行提交操作,并单击确认

    天任务依赖分钟任务最佳实践

    每天 00:00 执行的 SQL 任务为天任务,依赖于每 5 分钟抽取一次数据的分钟任务。天任务会对当天同步任务抽取的所有数据进行计算。

    背景信息

    在 DataWorks 调度系统中,下游对上游的依赖需要遵循的原则为:下游任务生成的实例会找到当天离自己最近结束的一个上游实例作为上游依赖,如果上游依赖实例运行成功,才会触发本节点实例运行。如果上游节点每天生成多个实例,则下游无法识别是哪一个实例离它最近结束,导致必须等上游当天生成的所有实例运行完成后才会运行。

    因此,上游节点必须配置自依赖,SQL 任务在 00:00 的实例才会准确依赖 00:00 生成的同步任务实例结束后再运行。

    本实验的实现思路如下:

    • 创建一个 SQL 节点作为上游的分钟任务,一个 SQL 节点作为下游的天任务。
    • 设置上游 SQL 节点的调度时间为每 5 分钟调度一次(开始时间 00:00,结束时间 23:59,时间间隔 5 分钟)。
    • 配置上游 SQL 节点依赖上一周期 > 本节点,以形成自依赖
    • 设置下游 SQL 节点每天 00:00 调度一次

    操作步骤

    调度配置页面,找到时间属性,设置调度周期分钟,开始时间为 00:00,每间隔 5 分钟调度一次。为保证一天的实例都运行完,您需要设置自依赖

    • 上述配置可以保证您一天产生的实例能够依次运行完成
    • 如果您的分钟任务中有一个调度任务出错,则设置自依赖后面的实例都不会运行,需要您手动进行处理

    说明:由于上游分钟任务设置了调度自依赖,下游天任务将根据就近原则挂载依赖。

    常见问题

    01. 什么是调度依赖

    调度依赖就是节点间的上下游依赖关系,在 DataWorks 中,上游任务节点运行完成且运行成功,下游任务节点才会开始运行。
    说明:
    挂载依赖关系后,当前节点执行的必要条件之一为当前节点依赖的父节点需要执行成功。

    02. 为什么要设置调度依赖

    配置调度依赖后,可保障调度任务在运行时能取到正确的数据(当前节点依赖的上游节点成功运行后,DataWorks 通过节点运行的状态识别到上游表的最新数据已产生,此时,下游节点再去取数)。避免下游节点取数据时,上游表数据还未正常产出,导致下游节点取数出现问题。

    03. DataWorks 上如何设置调度依赖?

    在 DataWorks 上,上游节点的输出作为下游节点的输入,形成节点依赖关系。

    04. 哪些场景不支持设置调度依赖?

    由于 DataWorks 的调度依赖主要保障的是调度节点定时更新的表数据,通过节点调度依赖保障下游取数无误。因此,不是 DataWorks 平台上调度更新的表,平台无法监控。

    当存在非周期性调度生产数据的表,有节点 select 该类表数据时,需手动删除通过 select 自动生成的依赖上游节点配置。非周期性调度生产数据的表包括:

    • 从本地上传到 DataWorks 的表
    • 维表
    • 非 DataWorks 调度产出的表
    • 手动任务产出的表

    调度依赖配置常见问题

    01. 提交节点报错:当前节点依赖的父节点输出名不存在

    问题现象

    可能原因 1:没有节点产出这个表

    可能原因 2:有节点产出该表数据,但是该表没有添加为该节点的输出

    可能原因 3:存在同名的节点输出

    02. 提交节点时提示:输入输出和代码血缘分析不匹配

    03. 为什么自动解析的父节点名会报依赖的父节点输出(表)不存在?

    05. 为什么有些节点的本节点的输出中,下游节点名称、下游节点ID有这些数据,有些为空并且不能手动编辑。

    06. 下游任务依赖上游任务的运行规则是什么?

    在 DataWorks 调度系统中,节点设置上下游依赖关系是为了保障数据有效产出和获取。所以是否设置依赖关系可以从数据是否存在强相关性去判断。

    07. 节点的输出名称的作用是什么?

    节点的输出名称用于建立节点间的依赖关系。假设节点 A 的输出名称是 ABC,而节点 B 将 ABC 作为它的输入,则节点 A 与节点 B 之间便建立了上下游关系。

    08. 一个节点可以有多个输出名称吗?

    可以。节点输出相当于当前节点的定义,下游节点如果需要依赖当前节点,可以通过引用本节点的任何一个输出名称作为下游节点的父节点输出名称,即可与当前节点建立依赖关系。

    09. 多个节点往同一张表写数据,自动解析报错节点输出名相同且提交报错,可以有相同的输出名称吗?

    10. 使用自动解析依赖关系时,如何不解析到中间表?

    在 SQL 代码中选中中间表名并右键单击删除输入或删除输出,再次执行自动解析输入输出即可。

    11. 业务流程最上游节点的父节点配置应该如何配置?

    如果是业务流程的业务开始节点,您可以选择在业务流程内添加一个虚拟节点作为业务流程的开始节点。虚拟节点的上游可以设置为工作空间根节点。

    节点删除、变更常见问题

    01. 为什么在节点A搜索上游节点输出名时,搜索到了节点B不存在的输出名?

    因为依赖关系解析是基于已经提交和发布的节点信息来进行搜索,如果节点 B 提交成功后,您又删除了节点 B 的输出名称且未提交至调度系统,则在节点 A 上仍然能搜到节点 B 已删除的输出名。

    02. 为什么节点删除报错当前节点存在子节点,下线失败,但是在调度配置界面看已经没有该节点的依赖?

    当前节点在开发环境和生产环境都没有节点依赖当前节点时,当前节点才能被下线。您可以分别进入开发环境运维中心和生产环境运维中心进行确认。

    重点:跨周期依赖配置实时场景

    01. 为什么运维中心有些依赖线是虚线?

    虚线是设置了跨周期依赖。

    02. 小时任务设置自依赖对自身及下游节点有什么影响?

    • 对当前节点执行影响: 上游节点上一周期实例运行成功后下一周期实例才会运行。例如:小时任务 0 点开始每小时调度一次,1 点的实例需要等待 0 点的实例执行成功,1 点的实例才会执行。

    • 对下游节点执行影响: 假设下游节点为日调度任务,下游日节点依赖由直接依赖多个小时实例变为直接依赖上游某一个小时实例,小时实例由于存在自依赖,所以下游日任务实际上为间接依赖了上游多个小时实例。

    03. 日调度任务依赖小时调度任务运行的不同场景,依赖关系如何配置?

  • 场景一:日调度任务依赖小时调度任务当天的所有小时实例。
  • 小时任务不设置自依赖:天调度任务直接依赖小时调度任务时,会依赖小时调度任务当天所有实例。
  • Scheduling-dependencies-39

  • 场景二:日调度任务依赖小时调度任务当天天具体某个实例。
  • 小时调度任务配置:小时调度任务设置自依赖,即小时任务调度配置界面依赖的上一周期处选择本节点。
  • 日调度任务配置:天调度任务直接依赖小时任务。即天调度任务的输入(依赖的上游节点)配置小时任务。
  • Scheduling-dependencies-40

  • 场景三:日调度任务依赖小时调度任务昨天所有的小时实例。
  • 日调度任务调度配置跨周期依赖小时调度,即日调度任务调度配置界面选择依赖上一周期,选择自定义,填小时任务节点 id。
  • 日调度任务调度配置去掉小时任务同周期依赖,即同周期依赖(依赖的上游节点)处,去掉小时任务同周期依赖。

  • 注:
    如果日调度任务对小时调度任务做过跨周期依赖,那需要检查是否同周期依赖已经去掉。否则日调度任务会同时依赖小时调度任务当天所有实例和昨天所有实例。

    04. 天任务依赖小时任务时,直接设置依赖关系,天任务几点会运行?

    原理说明:天任务直接依赖小时任务时:天任务会依赖小时任务当天所有实例,即等到小时任务当天最后一个实例执行成功,天任务才会执行。

    实时场景:

    • 假设小时任务 0 点开始,每小时调度一次。那么天任务需要等待 24 个小时任务全部运行完成才能开始运行天任务。
    • 运维中心依赖关系查看:天任务右键查看父节点会显示依赖小时任务当天所有实例,即依赖 24 个小时实例。(依赖线:实线)

    05. 天任务依赖小时任务时,如何实现天任务依赖小时任务当天具体某个实例,而非依赖所有的小时实例?

    原理说明: 当天任务依赖小时任务当天具体某个小时实例时,小时任务只需要设置自依赖,天任务定时时间与具体某个小时实例定时时间保持一致即可。

    实时场景: 当天任务需要依赖小时任务当天定时时间 12 点的实例时。

  • 依赖关系设置:
  • 上游小时任务配置:小时任务需要设置自依赖,即在调度配置,在时间属性区域,选中依赖上一周期 > 本节点
  • 下游天任务配置:天任务设置定时时间为 12 点。
  • 运维中心依赖关系查看:
  • 天实例右键查看父节点会显示依赖小时任务当天定时时间为 12:00 的实例。(依赖线:实线)
  • 小时实例右键查看父节点会显示上游父节点为上一个小时实例,定时时间 12:00 的实例依赖定时时间 11:00 的实例(依赖线:虚线,小时任务设置了跨周期依赖,依赖项:本节点)

  • 06. 日任务依赖小时任务时,如何实现日任务依赖小时任务昨天所有的小时实例。而非当天所有小时实例?

    • 原理说明: 日任务依赖小时任务昨天所有小时实例,日任务需要跨周期依赖小时任务

    • 实时场景:当天任务需要依赖小时任务当天所有实例。

  • 依赖关系设置:
  • 上游小时任务调度配置:无需配置
  • Scheduling-dependencies-06

  • 下游日任务调度配置:跨周期依赖小时任务,即在调度配置时间属性区域,选择依赖上一周期 > 小时任务节点 ID
  • Scheduling-dependencies-07

  • 下游日任务依赖配置:依赖的上游节点 选择 使用项目空间根节点,避免重复依赖本周期上游节点
  • image

  • 运维中心依赖关系查看:下游日实例右键查看父节点会显示依赖小时任务昨天所有小时实例。(依赖线:虚线,日任务设置了跨周期依赖小时任务)

  • 注:
    虽然日任务依赖小时任务,且小时任务的定时时间为 21:00,但是日任务是跨周期依赖小时任务昨天所有的小时实例,故日任务 实际执行时间为第二天 1:00。

    • 上游小时任务周期实例运行情况

    Scheduling-dependencies-41

    • 下游日任务周期实例运行情况

    Scheduling-dependencies-42


    07. 什么情况下配置依赖上一周期的依赖项为本节点?

    业务场景: 如果当前节点本周期任务运行需要依赖上一周期当前节点产出的节点数据时,当前节点可以设置自依赖。即当前节点上一周期实例执行完成后,当前节点下一周期的实例才去执行,避免当前实例取数时,上一周期实例还在执行(数据还未产出)。

    • 本节点依赖自己上一周期产出的数据,如果您需要确认上一周期产出数据的时间,请在任务的调度配置 > 时间属性区域,配置依赖上一周期 > 本节点
    • 小时任务依赖天任务,当上游天任务运行完成时,已到下游小时任务的多个周期定时时间,导致小时任务多周期并发调度。此时您可以在任务的调度配置 > 时间属性区域,配置依赖上一周期 > 本节点

    08. 下游节点同时依赖多个任务运行时,依赖关系如何配置?

    如果下游节点同时配置上了依赖多个任务,是否需要依赖所有节点需要您进行业务判断,如果表数据有强相关依赖的,建议将所有节点都设置上依赖关系。节点是否需要设置依赖关系,请参考为什么要设置调度依赖

    例如,下游节点 C 同时依赖日调度任务 B 及当天的小时调度任务 A,小时调度任务输出结果为表 A,日调度任务输出结果为表 B,下游节点 C 需要依赖表 A 及表 B 运行。

    假设下游节点 C 中涉及查询表 A 及表 B 的相关数据,当您仅配置依赖的上游节点为小时调度任务 A,而未配置依赖的上游节点为日调度任务 B,则可能在上游节点的日调度任务 B 未执行完成时,下游节点 C 便开始执行节点任务,导致获取日调度任务的输出表 B 的数据失败,任务运行报错。因此,该示例中,您需要将日调度任务及小时调度任务均配置为下游节点 C 依赖的上游节点。

    如果下游节点对上游表没有强依赖关系,即下游节点取任何时候上游表数据都没有问题(即使上游节点最新表数据也未产出),这种情况下,可以不设置节点依赖关系。

    09. 上游 A 是小时任务,下游 B 是日任务,任务 B 每天在 A 任务全部执行完成后要汇总执行一次,小时任务运行到第二天,日任务 B 是否会运行,参数是否会影响

    日任务 B 直接依赖小时任务 A 当天的实例,日任务 B 会汇总当天的小时任务。如果小时任务完成最后一个实例的运行,已经到了第二天,则下游的日任务仍会执行。只是运行时间不同,调度参数替换不受影响。

    • 小时任务 A 调度设置

    Scheduling-dependencies-04

    • 日任务 B 调度设置

    Scheduling-dependencies-05

    注:虽然日任务 B 设置的定时时间为 6:00,但由于所以来的小时任务 A 第二天才完成,故日任务 B 实际执行时间为小时任务 A 完成后,立刻执行。

  • 小时任务周期实例运行情况:
  • 实例完成时间(执行至第二天才完成)
  • Scheduling-dependencies-17

  • 调度参数
  • Scheduling-dependencies-18

    • 日任务周期实例运行情况
  • 日任务周期实例运行情况:
  • 实例完成时间
  • Scheduling-dependencies-19

  • 调度参数
  • Scheduling-dependencies-20

    • 查看运维中心的调度实例,检查小时任务 A 和日任务 B 是否正常运行,参数是否受影响

    10. 节点 A 每天每小时整点执行一次,节点 B 每天运行一次。如何设置节点 A 每天第一次运行成功后,节点 B 便开始执行?

    配置节点 A 时,需要勾选依赖上一周期,并选择本节点。节点 B 的定时时间配置为 0 点,则每天自动调度实例中,节点 B 的实例仅依赖节点 A 在 0 点生成的实例,即节点 A 的第一个实例。

    调度依赖配置实时场景

    01. 有 A、B、C 三个任务,如何实现每个小时执行一次 A->B->C(A 执行完了 B 再执行,B 执行完了 C 再执行)的任务流程?

    • 依赖关系设置: 将 A、B、C 的依赖关系设置为 A 的输出为 B 的输入,B 的输出为 C 的输入。
    • 调度频率设置: 由于调度配置为节点维度的配置,所以如果 3 个节点都需要小时调度,需要 A、B、C 的调度周期均设置为小时才可

    02. 如何设置跨业务流程,同地域跨项目依赖?

    原理说明: 上游节点的输出作为下游节点的输入形成节点依赖关系。在需要设置依赖关系的节点输入处添加需要依赖的节点(跨项目,跨业务流程)的节点输出即可。

    03. 已配置失败重跑的任务在运行失败后未重跑,并报错 Task Run Timed Out, Killed by System!!!

    • 报错内容:

    当目标任务调度配置的时间属性中,重跑属性配置为运行成功或失败后皆可重跑或运行成功后不可重跑,运行失败后可以重跑,实际执行任务时,该任务在运行失败后未重跑,并产生 Task Run Timed Out, Killed by System!!! 报错。

    • 可能原因:

    该任务调度配置时间属性中,配置了超时时间。当任务的运行时长超过超时时间,任务自动终止运行。由于超时导致运行失败的任务不会触发任务重跑。

    • 解决方案:

    当任务运行出现超时失败时,失败重跑机制不生效,您需手动重启相关任务。

    参考资料

    配置调度依赖

    调度配置-依赖关系常见问题

    调度配置最佳实践

    调度依赖附录

    原创文章,转载请注明出处:http://www.opcoder.cn/article/86/