上游任务状态已知且至少其中一个成功后触发任务

时间:2017-01-27 06:05:06

标签: airflow

我有如下要求,但trigger_rule似乎无法提供预期的行为

假设任务D有两个上游任务

  • U1:1秒
  • U2:100秒(比U1长很多)

我希望仅在

时触发任务D.
  • U1和U2都成功
  • U1成功,U2被跳过(未失败)

更确切地说,应该触发D的场景示例包括

  • C1:U1和U2都成功
  • C2:U1被跳过,U2成功

应跳过D的场景示例包括

  • C3:U1失败,U2成功
  • C4:U1和U2都被跳过
  • C5:U1失败,U2跳过

我曾尝试为{D}跟踪trigger_rule,但没有一个能提供我想要的行为,因为

  1. all_success:在方案C2中不会触发D
  2. one_sucess:在U1成功后立即触发D而不在场景C2中等待U2
  3. all_done:即使在情景C4
  4. 中也会触发D.

1 个答案:

答案 0 :(得分:0)

您可以使用Xcom执行此功能。 基本上,您可以通过使用xcom_push推送上游任务设置一些键和值,然后下游将其设置为使用xcom_pull()

这里的文件: https://airflow.incubator.apache.org/concepts.html#xcoms

此处Airflow回购示例: https://github.com/apache/incubator-airflow/blob/master/airflow/example_dags/example_xcom.py