我一直在评估气流。我有这个用例,我有一个工作流程,每小时运行一次,以获得每小时的数据聚合。和另一个每天运行以获得相同的每日聚合。是否有可能创建一个组合工作流,只有在过去一天所有小时聚合都成功时,每日聚合才会运行?我已经看到你可以创建子dag但两个dag可以以不同的频率运行吗?如果是,如何?
答案 0 :(得分:3)
不确定您希望如何使用它,但是虽然没有直接的方法,但有几种方法可以使用大量的气流操作员来构建这样的dag。
示例您可以使每小时dag depend_on_past
然后使用python分支运算符使日期聚合任务/ dag在每小时dag结束时运行/触发当天的最后一次运行。查看PythonBranchOperator
和TriggerDagRunOperator
。
您还可以为每日聚合器创建自己的传感器,以确保当天的所有每小时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小时之间引起一些虚假信息。