如何在Apache Airflow中删除指定run_id的DAG运行实例?
删除特定run_id的DAG运行实例方法
当然可以删除带有特定run_id的DAG运行实例!不过Airflow CLI里并没有直接叫airflow delete_dag_run的命令,但有几种靠谱的方法能实现这个需求,我给你详细说下:
方法1:使用Airflow CLI的clear命令(推荐)
这是官方推荐的常用方式,clear命令不仅能清除任务实例,还可以精准指定要删除的DAG运行(通过run_id)。命令格式如下:
airflow dags clear -d <你的dag_id> -r <目标run_id> --yes
-d:指定要操作的DAG ID-r:精确匹配要删除的运行实例的run_id--yes:跳过确认提示,直接执行删除操作(不加的话会弹出确认对话框)
如果是Airflow 1.x版本,命令格式几乎一致,只需去掉dags前缀:
airflow clear -d <你的dag_id> -r <目标run_id> --yes
方法2:通过Airflow REST API删除
如果你习惯用API做自动化操作,可以发送DELETE请求到Airflow Webserver的API端点,示例命令如下:
curl -X DELETE "http://<你的airflow-webserver地址>:<端口>/api/v1/dags/<dag_id>/dagRuns/<run_id>"
如果你的Airflow开启了身份验证(比如基本认证),需要追加认证参数:
curl -u <用户名>:<密码> -X DELETE "http://<你的airflow-webserver地址>:<端口>/api/v1/dags/<dag_id>/dagRuns/<run_id>"
这个方法很适合集成到自动化脚本或其他系统中。
方法3:直接操作元数据库(不推荐,应急用)
如果CLI和API都无法使用,你可以直接操作Airflow的元数据库,但强烈不推荐这种方式——直接修改数据库可能导致数据不一致,操作前最好先暂停Airflow的调度和Web服务进程。
以PostgreSQL为例,执行以下SQL语句:
-- 删除指定的DAG运行记录 DELETE FROM dag_run WHERE dag_id = '<你的dag_id>' AND run_id = '<目标run_id>'; -- 同时删除关联的任务实例记录(建议同步删除,避免残留数据) DELETE FROM task_instance WHERE dag_id = '<你的dag_id>' AND run_id = '<目标run_id>';
MySQL数据库的语法基本一致,无需调整。
内容的提问来源于stack exchange,提问作者Oleg Alexander




