首页/数据/数仓建模速查/调度依赖设计:表级依赖优先
分层与规范64 条

调度依赖设计:表级依赖优先

依赖用表级产出依赖表达(上游分区就绪触发下游),避免依赖具体任务名或人工等待;跨引擎链路用就绪文件或元数据事件衔接。

数仓建模速查数据更新于 2026-10-13

调度依赖该怎么设计

调度依赖要表达「数据准备好了没有」,而不是「某个任务跑完了没有」。因此首选表级加分区级的产出依赖:上游分区写入并注册成功后,下游才启动,判据通常是分区存在且行数大于 0。跨引擎链路(Hive 产出、Spark 或 Flink 消费)用就绪文件或元数据事件衔接。依赖设计只需检验两件事:重跑上游时下游能否自动跟随,上游延迟时下游是等待而不是空跑。

基本信息

依赖粒度表级加分区级,而不是任务名
就绪判据目标分区存在且行数大于 0
跨引擎衔接就绪文件或元数据事件,如 _SUCCESS 标记、分区注册消息
应避免的做法依赖任务名硬编码、人工等待、固定时间盲跑
补数要求重跑上游能自动级联下游
巡检动作定期清理孤儿任务与无人消费的产出表
常见平台机制Airflow 的外部任务传感器与 Dataset、DolphinScheduler 的依赖节点、DataWorks 的跨周期依赖

典型使用场景

  • 同引擎链路:上游 Hive 表产出当天分区后触发下游作业,靠分区就绪探测
  • 跨引擎链路:上游写就绪文件,下游监听到标记文件再启动,避免读半成品
  • 补数级联:重跑上游分区后,下游依据依赖自动重跑对应日期
  • 上游延迟:下游进入等待而不是按固定时间开跑,减少空跑与人工干预
  • 链路巡检:定期找出无人消费的产出任务,及时下线减少维护面

依赖表达方式优先级

依赖表达方式优先级
# 依赖表达方式,从推荐到不推荐
1) 表分区就绪依赖(推荐):上游注册分区后触发下游
   -- 就绪判据:分区存在且行数大于 0
   SELECT count(1) FROM ods_order WHERE dt = '2026-10-12';
2) 就绪文件:上游写 _SUCCESS 或 _READY 文件,跨引擎通用
3) 任务名依赖:仅在没有表产出的流程步骤里使用,改动需同步
4) 固定时间等待(不推荐):上游一旦延迟,整条链路必然出错

依赖方式对照

方式触发依据可重放性适用场景
表分区就绪分区存在且行数大于 0好,补数自动级联有表产出的主要链路
就绪文件上游写入标记文件好跨引擎或对象存储链路
任务名依赖上游任务实例状态一般,改名后失效无表产出的流程步骤
固定时间等待时钟差临时应急,不宜用于生产
人工依赖(等某个同事确认、等群里通知)让链路无法重放。补数时每个环节都要人工触发,既慢又容易漏,应尽早改造成数据就绪探测。
只判断上游任务成功是不够的:任务成功但产出空分区的情况很常见,就绪判据里带上行数校验,才能把「跑完」和「有数据」区分开。

易错点

  • 依赖靠文档和人工记忆维护:换人后链路断裂,且没有任何告警提示
  • 用固定时间等待替代依赖:上游延迟时下游空跑,产出空分区并覆盖正确数据
  • 依赖硬编码任务名:上游改名或拆分后依赖静默失效,下游提前启动
  • 只判断任务成功不校验产出:上游成功但分区为空,下游照常执行
  • 孤儿任务长期无人消费仍在调度:白耗资源,血缘关系也变得难以辨认

数据来源与参考

  • 阿里《大数据之路:阿里巴巴大数据实践》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌