具有不同调度间隔的气流 DAG 依赖性

时间:2021-04-29 17:50:59

标签: airflow airflow-scheduler directed-acyclic-graphs

我需要保持与具有不同调度间隔的 Airflow DAGS 的依赖关系

示例

DAG 1 - 任务 1、任务 2(周一至周六上午 9 点运行)

DAG 2 - 任务 1、任务 2(每周周五运行)

DAG 3 - TASK 1(每天周一至周六运行,没有特定时间,在 DAG 1 或 DAG 2 后立即触发)

要求:

  1. DAG 1 TASK 1 和 DAG 2 TASK 1 可以并行运行
  2. DAG 2 TASK 2 只有当 DAG 1 TASK 2 成功时才应在周五每周触发一次
  3. DAG 3 仅在以下情况下运行:
  • 周一至周六的 DAG 1 成功

  • DAG 1 和 DAG 2 在周五成功

尝试以下示例:

DAG 1:

with DAG('DAG 1',
     schedule_interval='0 9 * * 1-6'
     ) as dag:

TASK1 = BashOperator(task_id='TASK1',
                bash_command='sample')

TASK2 = BashOperator(task_id='TASK2',
                bash_command='sample')

 triggerDAG2TASK2 = TriggerDagRunOperator(
        task_id="TASK2",
        trigger_dag_id="DAG 2"
    )

 triggerDAG3TASK1 = TriggerDagRunOperator(
        task_id="TASK1",
        trigger_dag_id="DAG 3"
    )

TASK1  >> TASK2 >> *triggerDAG2TASK2 OR triggerDAG3TASK1*  

DAG 2:

with DAG('DAG 2',
     schedule_interval='0 9 * * 5'
     ) as dag:

TASK1 = BashOperator(task_id='TASK1',
                bash_command='sample')

TASK2 = BashOperator(task_id='TASK2',
                bash_command='sample')

 triggerDAG3TASK1 = TriggerDagRunOperator(
        task_id="TASK1",
        trigger_dag_id="DAG 3"
    )

TASK1  >> TASK2 >> triggerDAG3TASK1

DAG 3:

with DAG('DAG 3',
     schedule_interval='@daily' ## No specific time, immediately after DAG 1 OR DAG 2
     ) as dag:

TASK1 = BashOperator(task_id='TASK1',
                bash_command='sample')

TASK2 = BashOperator(task_id='TASK2',
                bash_command='sample')

TASK1 

如何以不同的计划间隔保持这些依赖关系?

我读过某处不推荐外部任务传感器,因为它只检查当天运行。

因为这是一个示例,所以我有多个 DAGS/任务,我正在尝试分离内容。我也可以说案例 DAG 1 每天晚上 9 点运行,DAG 2 每周晚上 10 点运行,DAG3 第二天早上 9 点运行。也需要可以处理不同日期之间的依赖关系的解决方案

0 个答案:

没有答案