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.