AirFlow:如何在一行中设置大量外部依赖项?

时间:2018-11-15 04:10:33

标签: hadoop airflow airflow-scheduler

我正在阅读this question,试图实现对其他ExternalTaskSensor( task_id='wait_for_the_first_task_to_be_completed', external_dag_id='a', external_task_id='first_task', dag=dag) >> \ 任务的依赖。在此示例中,依赖关系写为:

2*number of dependencies

在我的数据仓库中,一张表可能取决于数百个任务。使用这种格式,它将生成Azkaban行代码。这真的是不能接受的,还有更好的选择吗?

例如,在dependencies = dag1.task1, dag2.task4, dag2.task5, DAG3.task2, etc... 中,我可以这样编写多个依赖项:

['roll_off_m4**', 'ov_offer_desc_m4', 'curr_ov_tier_desc2_m4', 'income', 'age', 'vid_offer_up_flag_m3', 'roll_off_m2', 'ov_offer_group_v2_desc_m4', 'oolpromo_rng_m2*', 'rsdvr_orig_m2', 'vidpromo_rng_m2*', 'ovpromo_rng_m2*']

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以在循环中创建传感器并在其中设置依赖项。我认为它更干净,但是随着依赖性数量的增加,我不确定这是否满足您对代码量的要求。

示例:

dependencies = [('dag1', 'task1'), ('dag2', 'task4'), ('dag2', 'task5'), ('dag3', 'task2')]

other_task = PythonOperator(...)

for dag_id, task_id in dependencies:
    sensor = ExternalTaskSensor(
        task_id='wait_for_{0}.{1}'.format(dag_id, task_id),
        external_dag_id=dag_id,
        external_task_id=task_id,
        dag=dag)
    sensor >> other_task