Airflow 以编程方式清除任务实例的状态
我想在DAG A完成执行时清除DAG B中的任务。A和B都是计划的DAG 是否有任何Airflow 以编程方式清除任务实例的状态,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我想在DAG A完成执行时清除DAG B中的任务。A和B都是计划的DAG 是否有任何运算符/方法可以清除任务状态并以编程方式重新运行DAG B 我知道使用和Web UI选项来清除任务 是一个非常有用的地方,可以窥探SQLAlchemy气流的魔力 命令被执行 从源头上看,你可以 复制它(假设您还想稍微修改一下功能) 或者只需从airflow.bin import cli执行,并直接调用所需的函数 由于我的目标是在DAG A完成执行时重新运行DAG B,因此我最终使用Bash运算符清除了
运算符/方法可以清除任务状态并以编程方式重新运行DAG B
我知道使用和Web UI选项来清除任务
- 是一个非常有用的地方,可以窥探
SQLAlchemy
气流的魔力
- 命令被执行
- 从源头上看,你可以
- 复制它(假设您还想稍微修改一下功能)
- 或者只需从airflow.bin import cli执行
,并直接调用所需的函数
由于我的目标是在DAG A完成执行时重新运行DAG B,因此我最终使用Bash运算符清除了DAG B:
# Clear the tasks in another dag
last_task = BashOperator(
task_id='last_task',
bash_command= 'airflow clear example_target_dag -c ',
dag=dag)
first_task >> last_task
我建议远离这里
与通过BashOperator和/或CLI模块相比,DAG/tasks的气流功能在引用对象时更好地公开
将名为“clear_dag_b”的python操作添加到dag a,该操作从dags文件夹(模块)导入dag_b,如下所示:
from dags.dag_b import dag as dag_b
def clear_dag_b(**context):
exec_date = context[some date object, I forget the name]
dag_b.clear(start_date=exec_date, end_date=exec_date)
重要如果出于某种原因,不将dag\u b计划时间与开始日期/结束日期进行匹配或重叠,则clear()操作将错过dag执行。本例假设dagA和B计划相同,并且当A执行日X时,您只想从B清除日X
在清除之前,检查dag_b是否已经运行可能是有意义的:
dab_b_run = dag_b.get_dagrun(exec_date) # returns None or a dag_run object
尤其是当您需要使用cli中可用的那些标志时,这种方法效果更好,例如下游
到源文件的链接断开,下面是工作链接
dab_b_run = dag_b.get_dagrun(exec_date) # returns None or a dag_run object