externalTasksensor在气流中具有多个依赖关系



我有达加(cron 5am(和dagb(cron 6am(。这两者都从某个地方摄取数据并转输入数据纳克。现在,我希望DAGC(ETL的工作(等待DAGA和DAGB完成。

我使用的是ExternalTaskSensor而不是TriggerDagRunOperator,因为我不认为摄入层会触发下游的任何东西。我读过类似的问题,说我应该同时运行DAG。

现在,这部分使我感到困惑,因为如果我要遵循这一点,这是否意味着我所有的气流工作都将同时开始,而下游的作业一直在戳戳直到上游准备就绪?这也意味着达加和达格必须同时开始,即使它们之间没有依赖性?

dagA = DAG('dagA', description='dagA',
          schedule_interval='0 5 * * *',
          start_date=datetime(2017, 3, 20), catchup=False)
dagB = DAG('dagB', description='dagB',
          schedule_interval='0 6 * * *',
          start_date=datetime(2017, 3, 20), catchup=False)
dagC = DAG('dagC', description='dagC',
          schedule_interval=None,
          start_date=datetime(2017, 3, 20), catchup=False)
wait_for_dagA = ExternalTaskSensor(
    task_id='wait_for_dagA',
    external_dag_id='dagA',
    external_task_id=None,
    execution_delta=None,
    dag=dag)
wait_for_dagB = ExternalTaskSensor(
    task_id='wait_for_dagB',
    external_dag_id='dagB',
    external_task_id=None,
    execution_delta=None,
    dag=dag)
[wait_for_dagA, wait_for_dagB] >> etl_task 

我在气流上1.10.3。

..这是否意味着我所有的气流工作都将同时开始 下游作业一直在戳戳直到上游准备就绪?

  • 只有在您需要的情况下,气流作业才会同时开始(但没有要求(。
  • 下游作业(etl_task及其下游依赖关系(将仅在wait_for_dagAwait_for_dagB的成功后开始。这些等待的任务将继续戳戳(这就是传感器的操作(,直到相应的DAG成功为止。

这也意味着Daga和Dagb甚至必须同时启动 尽管他们之间没有依赖性?

如上所述,这不是必需的。用DAG S代替cron S的整个想法是,您无需准确地计时任务。相反,您可以灵活地迫使他们运行一次,而不论不同的开始时,执行时间和意外延迟。


提示

  • ,但请查看mode参数可配置的不同戳记行为
  • 还可以在ExternalTaskSensor中查看可用参数
  • 如果您没有在传感器中指定external_task_id,请注意这样的陷阱

最新更新