我已安排执行每天运行的DAG。 它有效地工作了一天。
然而,每天我都想重新执行当天{{ds}}以及前n天(假设n = 7)。
例如,在计划在“2018-01-30”上运行的下一次执行中,我希望Airflow不仅使用执行日期“2018-01-30”运行DAG,而且还要重新运行所有前几天的DAG从“2018-01-23”到“2018-01-30”。
是否有一种简单的方法可以“使之前的执行无效”,以便自动运行回填?
答案 0 :(得分:3)
您可以在循环中生成动态任务,并将偏移量传递给操作员。
以下是Python的示例。
import airflow
from airflow.operators.python_operator import PythonOperator
from airflow.models import DAG
from datetime import timedelta
args = {
'owner': 'airflow',
'start_date': airflow.utils.dates.days_ago(2),
'schedule_interval': '0 10 * * *'
}
def check_trigger(execution_date, day_offset, **kwargs):
target_date = execution_date - timedelta(days=day_offset)
# use target_date
for day_offset in xrange(1, 8):
PythonOperator(
task_id='task_offset_' + i,
python_callable=check_trigger,
provide_context=True,
dag=dag,
op_kwargs={'day_offset' : day_offset}
)
答案 1 :(得分:0)
您是否考虑过每天运行一次的dag在过去7天内执行任务?我想你将只有7个任务,每个任务产生SubDAG,与执行日期的偏差不同。
我认为这将使调试更容易,历史更清晰。我相信尝试回填已执行的任务将涉及删除任务实例或将其状态设置为NONE。然后你仍然必须触发那些dag运行的回填。跟踪事情何时失败并且看起来有点混乱会更难。