一、功能简介
依赖检查是一种任务节点类型,用于实现跨工作流依赖:在下游工作流中声明对其他工作流的依赖,节点运行时自动检查上游工作流的运行状态,全部满足后放行下游任务继续执行。
典型场景:
场景 | 说明 |
数仓分层 | ODS 层工作流产出后,DWD 层工作流才能开始,两层分属不同工作流 |
多团队协作 | A 团队的工作流产出数据,B 团队的工作流依赖该数据,两个工作流独立维护 |
公共任务依赖 | 多个下游工作流都依赖同一个公共上游工作流(如基础数据准备) |
跨周期对齐 | 下游当天实例需要等待上游前一天实例成功后才能运行 |
与工作流内部依赖的区别:
属性 | 工作流内部依赖 | 依赖检查任务 |
依赖对象 | 同一工作流内的任务节点 | 其他工作流(可跨项目) |
配置方式 | 画布连线 + 运行条件 | 独立任务节点,配置依赖检查项 |
上游是否需要改动 | - | 不需要,上游工作流无需任何配置 |
使用依赖检查任务后,无需再把所有任务塞进同一个工作流,也无需通过 Python 脚本轮询上游状态,或用嵌套工作流变通实现。
二、前置条件
工作流调度模式下操作:依赖检查任务在编排空间中创建,需已进入工作流调度模式。
上游工作流已存在:依赖检查的检查对象是其他工作流的运行实例,需先确认上游工作流已创建并配置调度。
当前账号对上游工作流所在项目有权限:对工作流本身是否有权限不影响选择。
三、配置步骤
整体分四步:新建依赖检查任务 → 配置依赖检查项 → 配置调度设置与高级设置 → 保存并提交。
步骤一:新建依赖检查任务
有两个入口,任选其一:
入口 | 操作 |
目录树 | 在目录树目标位置新建任务,任务类型选择依赖检查 |
工作流画布 | 打开目标工作流的 DAG 图,新建任务,任务类型选择依赖检查 |
新建任务弹窗中填写:任务名称、任务类型(依赖检查)、所属工作流目录(画布入口创建时所属工作流已确定)。
放置位置:依赖检查任务可放在分支节点的下游、归并节点的上游;暂不支持放在 for-each 节点内部。
步骤二:配置依赖检查项
进入依赖检查任务的配置页,在「依赖检查项」区域添加检查项。页面默认提供一条,最多可配置 20 条。每条检查项包含以下配置:
依赖工作流
下拉单选,必填。
可选择除当前工作流外的其他工作流。
同一工作流可以被多条检查项重复选择(例如同时依赖工作流 A 的不同周期实例)。
选择时不要求对上游工作流有权限:依赖检查只读取上游运行状态,不会查看工作流内部内容,也不会在上游执行任何操作。
若所选工作流已被删除,会提示「依赖工作流已被删除,请重新选择」,需重新选择后才能保存。
依赖粒度为整个工作流,暂不支持依赖到工作流内的具体任务。
时间偏移
输入框,必填,默认填充
${yyyyMMddHHmmss}。用于指定依赖上游哪个调度周期的实例,以本工作流实例自身的计划调度时间为基准计算,支持时间参数格式,支持多个偏移单位组合(如同时偏移天和小时)。
状态
下拉单选,默认为成功,即上游实例运行成功后该检查项才算满足。当前仅支持成功状态。
删除
点击检查项右侧删除按钮可删除该条检查项。
检查项之间的关系
多个依赖检查项之间为全部满足关系:所有检查项都满足条件后,依赖检查节点才会成功并放行下游任务。任意一条不满足,节点持续等待。
步骤三:配置检查间隔与高级设置
检查间隔
输入框 + 单位秒,必填,默认 10 秒,取值范围 5~600 秒。
每轮检查不满足时,按该间隔等待后进行下一轮检查。
任务属性
右侧抽屉中配置,与其他任务类型一致:任务名称、任务 ID、任务负责人、描述、调度参数。
调度设置
与其他任务类型一致,包含:调度策略、依赖配置、参数传递、高级设置。
参数传递:依赖检查任务暂不支持参数传递。
高级设置中的以下配置控制依赖检查节点的超时与重试:
配置项 | 说明 |
运行耗时超时 | 默认勾选,默认 6 小时,可修改。依赖检查节点持续等待的时长上限,超过后判定一次失败 |
失败重试次数 | 失败后的自动重试次数,每次重试会重新从头检查所有依赖检查项 |
重试等待时间 | 每次失败后等待多久再开始下一轮重试 |
步骤四:保存并提交
配置完成后点击保存、提交,流程与其他任务类型一致。
配置项速查
配置项 | 必填 | 默认值 | 说明 |
依赖工作流 | 是 | - | 单选,可选其他工作流,最多 20 条检查项 |
时间偏移 | 是 | ${yyyyMMddHHmmss} | 依赖上游的调度周期,支持时间参数 |
状态 | 是 | 成功 | 当前仅支持成功 |
检查间隔 | 是 | 10 秒 | 5~600 秒 |
运行耗时超时 | 默认勾选 | 6 小时 | 高级设置,可修改 |
失败重试次数 / 重试等待时间 | - | 与其他任务类型相同 | 高级设置 |
四、时间偏移参数说明
时间偏移用于指定「依赖上游哪个调度周期的实例」,填写格式与调度参数中的时间参数一致。
计算规则:以依赖检查节点所在工作流实例自身的计划调度时间为基准,减去配置的偏移量,得到上游实例的目标调度时间。偏移量支持多个单位组合,如同时偏移天和小时。
配置值 | 含义 |
${yyyyMMddHHmmss} | 依赖上游与本工作流同一调度时间的实例(本周期,T) |
${yyyyMMddHHmmss-1d} | 依赖上游比本工作流早一天的实例(T-1 同一时刻) |
${yyyyMMddHHmmss-1d-1h} | 依赖上游比本工作流早一天零一小时的实例 |
示例:上游工作流每天 0 点执行,下游工作流每天 1 点执行,下游需要等待上游前一天的实例成功后再运行:
下游 T 日实例的计划调度时间为 T 日 01:00;
上游前一天实例的计划调度时间为 T-1 日 00:00;
从 01:00 偏移到前一天的 00:00,需要减 1 天再减 1 小时,因此时间偏移配置为
${yyyyMMddHHmmss-1d-1h}。注意:
时间偏移计算出的目标调度时间必须与上游工作流的实际调度时间匹配,否则会查不到对应实例,节点持续等待直到超时。仍以上面的例子说明:上游每天 0 点执行,若只配置
-1d,计算出的目标时间是 T-1 日 01:00,上游并不存在这个时间点的实例,节点会一直等到超时失败。五、查看运行详情
依赖检查任务运行中,可在运维中心的任务运行详情页查看运行结果。
运行结果以列表展示每个依赖检查项的检查情况:
字段 | 说明 |
依赖工作流 | 该检查项声明的上游工作流 |
计划调度时间 | 根据时间偏移解析出的上游目标调度时间 |
状态 | 上游实例的实际运行状态 |
等待过程中可随时查看该列表,确认哪些检查项已满足、哪些仍在等待。
六、使用限制
一个依赖检查任务最多可配置 20 个依赖检查项。
多个检查项之间为「全部满足」关系,暂不支持「任一满足」等逻辑组合。
依赖状态仅支持成功。
依赖粒度为整个工作流,暂不支持依赖到工作流内的具体任务。
暂不支持放在 for-each 节点内部(分支节点下游、归并节点上游可用)。
测试运行不检查依赖:测试运行时不会实际检查跨工作流依赖,任务直接按运行成功处理,运行日志中会注明。跨工作流依赖是否生效,以周期调度的实际运行结果为准。
提交时不检查依赖的工作流是否已提交,请自行确认上游已提交并正常运行。
系统不检测循环依赖:若上下游互相配置依赖检查,双方会持续等待直至超时失败,请避免循环依赖。
全局搜索中无法搜到依赖检查任务。
依赖检查任务支持 Open API 与 CI/CD 流程,能力与其他任务类型一致。
七、常见问题
1. 节点一直处于运行中,是什么原因?
依赖检查节点在所有检查项满足前会按检查间隔持续轮询等待,属于正常行为。排查方向:
查看运行结果列表,确认各检查项的依赖工作流、计划调度时间、状态。
上游实例尚未生成(上游未到调度时间、被跳过、工作流暂停等)时,节点会继续等待,不会报错。
确认时间偏移配置是否正确,是否指向了上游实际存在的调度周期。
2. 节点运行失败是什么原因?
依赖检查节点等待超过「运行耗时超时」的时限后判定失败。若配置了失败重试,会自动重试并重新从头检查所有依赖项;所有重试轮次用完仍未满足,节点最终失败并阻塞下游任务。排查方向:上游是否长时间未成功、时间偏移是否配错、超时时间是否设置过短。
3. 上游工作流还没运行,依赖检查会直接报错吗?
不会。目标调度周期对应的实例不存在时(上游未执行、被跳过、工作流暂停等),节点会继续按检查间隔轮询,直到超时才判定失败。依赖的工作流本身不存在时,同样会持续等待直到超时。
4. 同一个调度时间上游跑了多次(调度 + 手动 + 重跑),以哪次为准?
统一取最新:同一调度时间存在多个实例时,取最新创建的实例;同一实例存在多次执行时,取最新一次执行的状态。
5. 测试运行显示成功,但周期调度时失败了?
测试运行不会实际检查跨工作流依赖,任务直接按运行成功处理。周期调度时会真实检查上游状态,请按 Q1、Q2 排查。
6. 上游和下游互相配置了依赖检查,会怎么样?
系统不检测循环依赖,互相等待会导致双方持续等待直到超时失败。请避免上下游循环依赖。
7. 为什么画布上看不到依赖检查的依赖连线?
依赖检查声明的是跨工作流依赖,不属于当前工作流内部的依赖关系,因此不会在画布连线和依赖关系中体现。请通过依赖检查任务的配置页查看依赖详情。