数据仓库图解交互式教材
调度系统一个任务,到底什么时候才可以开始?
学习进度0 / 64
EN
首页课程学习一个任务,到底什么时候才可以开始?
5-2调度系统12 分钟

一个任务,到底什么时候才可以开始?

用同一条存款余额 DAG 对比时间触发、依赖触发与外部条件检测,并观察 Sensor 如何判断 ready。

DAG运行条件任务依赖
已经两点了,任务为什么还不能开始?

一个任务,到底什么时候才可以开始?

定时器到了 02:00,只能说明系统发出了触发信号。存款余额任务还要等 2026-09-30 所需的输入和必要的上游条件满足,才有资格从等待进入运行。

运行窗口02:00日批触发,开始检查条件
输入状态等待 → ready当前业务日期所需输入到齐
DAGDWD → DWS → ADS依赖边决定谁可以继续

如果钟表已经指向 02:00,哪一个条件还没有满足?

核心概念

运行条件(Run Condition)

一个任务只有在运行窗口满足、当前业务日期所需输入 ready、以及必要上游依赖满足时,才会从 READY 进入 RUNNING。DAG 表达的是这种任务运行依赖。

DAG 上的箭头表示什么?

这条加工链可以读成:五份输入准备完成后,DWD 才能整理账户余额明细;DWD 成功后,DWS 才能形成存款余额主题;最后 ADS 才能发布结果。箭头表达任务之间的运行等待关系。

表依赖描述“DWS 的数据来自 DWD”,任务依赖描述“DWS 任务要等 DWD 任务成功”。两者有关联,但 DAG 不是完整的表级、字段级血缘图。

  • 多份输入会汇合到 DWD;缺一份就不能假定输入完整。
  • DWS 的运行资格来自 DWD 任务成功,不只是看表名相似。
  • 完整血缘还要回答字段和来源,留到后面的章节处理。
DAG 放行实验 · 三种真实运行方式

切换启动方式,观察任务何时获得运行资格

选择定时主动抽数、等待上游完成信号或扫描 FTP 到达,对比三种放行条件;另一个局部 Sensor 面板会用抽象文件演示轮询、完整性协议与 timeout。

正在加载交互实验…

文件出现,不等于外部数据已经 ready

当上游交付时间不确定时,Sensor 可以按配置的间隔主动观察外部条件:条件未满足就继续等待;满足后报告 SUCCESS,下游才获得运行资格;超过等待边界则进入 timeout,转人工处理或按约定明确失败。

例如 02:07 看到 `data.csv` 的名字,02:08 文件还在写入,直到 02:10 同批 `data.csv.done` 出现才代表约定的交付完成。只检查文件存在的 Sensor 可能在 02:08 提前放行;要求完成信号的协议则会继续等。

  • Polling interval 决定检查频率和可能的发现延迟,也影响外部系统承受的检查压力。
  • Timeout 是运行边界,不自动意味着所有系统都应失败;超时后的人工处理 / 明确失败路径要事先约定。
  • 可用的完成协议不一定必须是 done flag,但必须能可靠区分“开始交付”和“完整可消费”。
放在一起看

三种方式,等的到底是什么?

它们都能启动同一条 DAG,但“可以开始”的证据来源不同。

时间触发 / 主动抽数

时间到了就主动查询

  • 02:00 连接上游,主动抽取 business_date = 2026-09-30。
  • 表达“时间到了,我开始做事”。
  • 触发本身不能证明上游数据已经完整。
上游完成信号

等状态从 PROCESSING 变成 SUCCESS

  • 检查当天上游运行记录,而不是只看墙上时间。
  • SUCCESS 信号到达后,下游获得运行资格。
  • DAG 边把等待条件传给下游任务。
外部条件触发 / Sensor

主动观察,直到条件满足或超时

  • Sensor 按配置间隔检查外部状态;间隔长短是成本与发现延迟的取舍,不是固定标准。
  • 文件名已出现但仍在写入时,存在性检查可能误判;ready protocol 需要能证明整批已完成。
  • 条件满足报告 SUCCESS 后下游才获得资格;超时则转人工处理或明确失败,不默认自动失败。