气流:从DAG提取XCom,并确定未来的开始日期?

时间:2020-06-10 22:38:31

标签: airflow apache-airflow-xcom

在Airflow中,我们使用xcoms表示一个DAG已完成,而另一个DAG可以开始运行。例如。 DAG 1在12 AM运行,并在完成后发送xcom。 DAG 2从DAG 1读取xcom。

使用此限制之一是根据文档-xcom只能从执行日期更早的DAG中读取,而不能从执行日期更晚的DAG中读取。 https://airflow.apache.org/docs/stable/_modules/airflow/models/xcom.html

举个例子,假设我有4个DAGS,DAG#1,#2,#3,#4都可以做某事。然后,我有了DAG#5,它可以并行运行多个作业。 DAG#5出于不同的原因而依赖DAGS#1-4,并且对每一个都有单独的检查。 DAGS的安排如下:

DAG#1:上午12点 DAG#2:上午12点 DAG#3:上午12点 DAG#4:凌晨2点 DAG#5:上午1点

DAG#5具有4个任务,这些任务实质上是利用airflow.models.xcom.get_one方法从DAGS#1-4中读取XCcom。但是,由于DAG#4的开始时间为2 AM,因此DAG#5无法从DAG#4读取。

有没有办法解决这个问题?到目前为止,唯一考虑的就是简单地提前安排DAG#4并将其睡眠一个小时,但这似乎不是一个好习惯。

1 个答案:

答案 0 :(得分:0)

气流具有传感器的概念。在继续执行DAG之前,使用传感器来测试某些条件。在您的情况下,您可以使用ExternalTaskSensor:DAG 5将具有四个此类传感器,用于感测DAG 1、2、3和4的成功。在这种情况下,您根本不需要XCOM。

有关cross-DAG dependencies.

的更多信息