以不同的频率运行dags |空气流动

时间:2016-06-30 08:39:02

标签: airflow

我一直在评估气流。我有这个用例,我有一个工作流程,每小时运行一次,以获得每小时的数据聚合。和另一个每天运行以获得相同的每日聚合。是否有可能创建一个组合工作流,只有在过去一天所有小时聚合都成功时,每日聚合才会运行?我已经看到你可以创建子dag但两个dag可以以不同的频率运行吗?如果是,如何?

2 个答案:

答案 0 :(得分:3)

不确定您希望如何使用它,但是虽然没有直接的方法,但有几种方法可以使用大量的气流操作员来构建这样的dag。

示例您可以使每小时dag depend_on_past然后使用python分支运算符使日期聚合任务/ dag在每小时dag结束时运行/触发当天的最后一次运行。查看PythonBranchOperatorTriggerDagRunOperator

您还可以为每日聚合器创建自己的传感器,以确保当天的所有每小时dag成功。查看ExternalTaskSensor以供参考。

答案 1 :(得分:0)

这可能很丑陋,但是使用PythonOperator可以在幕后“很简单”地完成它:

dag = DAG('hourly_daily_update_v0',
          schedule_interval='@hourly')

hourly_update = PythonOperator(task_id='update_hourly_v0',
                               python_callable=update_hourly,
                               provide_context=True,
                               dag=dag)

daily_update = PythonOperator(task_id='update_daily_v0',
                               python_callable=update_daily,
                               provide_context=True,
                               dag=dag)

因此,您将每小时和每天称为气流方式。但是,在update_daily()调用中,您可以检查小时数:

def update_daily(**context):
    if context['execution_date'].hour == 0: # hour 0
        # Do all the things!
    else:
        # Do none of the things!

Airflow将一天24次成功运行update_daily(),但实际上,它只会在0小时进行一次工作。您可以随意扩展此时间。唯一的问题是Airflow的假定模式略有偏离,这将在1小时到24小时之间引起一些虚假信息。