Airflow 上游任务状态已知且至少有一个成功后触发任务
我有如下要求,但没有一个Airflow 上游任务状态已知且至少有一个成功后触发任务,airflow,Airflow,我有如下要求,但没有一个触发规则能够提供预期的行为 假设任务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跳过 我曾尝试遵循trigger_rules for D,但没有一个能提供我想要的行
触发规则
能够提供预期的行为
假设任务D有两个上游任务
- U1:1秒
- U2:100秒(比U1长得多)
- U1和U2都是成功的
- U1成功,跳过U2(未失败)
更确切地说,应该触发D的场景示例包括
- C1:U1和U2都成功了
- C2:U1被跳过,U2成功
- C3:U1失败,U2成功
- C4:U1和U2都被跳过
- C5:U1失败,U2跳过
我曾尝试遵循
trigger_rule
s for D,但没有一个能提供我想要的行为,因为
所有成功
:场景C2中不会触发Done_success
:在场景C2中,U1成功后将立即触发D,无需等待U2所有_done
:即使在场景C4中,D也会被触发您可以使用Xcom来实现此功能。 基本上,您可以通过使用
xcom\u push
推送上游任务,并通过下游拉动它来使用xcom\u pull()
此处的文档:
此处的气流回购示例:
谢谢你的建议。我理解您的解决方案,但它不是我正在寻找的解决方案类型。该解决方案基本上将“触发器规则”嵌入命令式代码中。然而,有气流的全部目的是使这些“触发规则”或任务之间的依赖关系具有delcarative和可视性,而无需深入代码。
ExternalTaskSensor
似乎能够做到这一点,但这听起来不是很整洁。此外,通用Fevour建议不要使用它们