我有达加(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_dagA
和wait_for_dagB
的成功后开始。这些等待的任务将继续戳戳(这就是传感器的操作(,直到相应的DAG成功为止。
这也意味着Daga和Dagb甚至必须同时启动 尽管他们之间没有依赖性?
如上所述,这不是必需的。用DAG
S代替cron
S的整个想法是,您无需准确地计时任务。相反,您可以灵活地迫使他们运行一次,而不论不同的开始时,执行时间和意外延迟。
提示
- ,但请查看
mode
参数可配置的不同戳记行为 - 还可以在
ExternalTaskSensor
中查看可用参数 - 如果您没有在传感器中指定
external_task_id
,请注意这样的陷阱