Errors
Apache Airflow

Apache Airflow: Airflow: how to delete a DAG?

Твой DAG отжил своё, стал legacy, мешает в интерфейсе, а удалить его — задача нетривиальная. Просто выкинуть файл из папки `dags/` недостаточно. Airflow — сущес

Твой DAG отжил своё, стал legacy, мешает в интерфейсе, а удалить его — задача нетривиальная. Просто выкинуть файл из папки dags/ недостаточно. Airflow — существо с памятью, оно хранит метаданные в базе, и без правильного подхода призрак дага будет являться тебе в UI вечно.

Раньше это был настоящий квест. Нужно было вручную чистить базу, таблицу за таблицей: dag_run, task_instance, xcom. Легко ошибиться, задеть что-то нужное. К счастью, времена меняются.

Полноценное удаление: Airflow 1.10 и выше

Начиная с версии 1.10, задача упростилась до одной команды. За это спасибо экспериментальному API, которое появилось после долгих просьб комьюнити.

Всё, что нужно — это dag_id, который ты видишь в интерфейсе.

Через CLI это делается так:

airflow delete_dag my_dag_id

Эта команда пройдется по связанным таблицам в метаданных и аккуратно удалит все следы указанного DAG: историю запусков, состояния задач, xcom. DAG исчезнет из списка после перезагрузки страницы.

Альтернативный путь: REST API

Если твоя логика завязана на автоматизацию или доступ к CLI затруднен, можно использовать экспериментальный REST эндпоинт.

curl -X "DELETE" http://127.0.0.1:8080/api/experimental/dags/my_dag_id

Учти слово experimental. В более новых версиях Airflow (2.0+) существует стабильный REST API, но для базового удаления дага этот метод, как правило, работает.

Что на самом деле происходит

Команда не удаляет твой Python-файл. Она очищает базу данных Airflow. Физический файл дага нужно убрать из директории самостоятельно, иначе scheduler снова его подхватит и занесет в метаданные при следующем сканировании.

Порядок действий такой: сначала удаляешь даг через CLI или API, затем — исходный файл из папки dags/. Или в обратном порядке, но тогда нужно дать scheduler время забыть старый даг перед удалением записей из базы.

Помни, что операция удаления затрагивает исторические данные. Если логирование запусков критично — сначала обеспечь бэкап или архив. Для сеньора это очевидно, но лишний раз не повредит.

Итог: больше не нужно лазить в сырые таблицы базы. Одна команда — и дага как не бывало. Главное, убедись, что версия Airflow не древнее 1.10.