Поддержка ручного и запланированного исполнения - PullRequest
1 голос
/ 06 апреля 2020

В моей организации уже давно используется группа обеспечения доступности баз данных, которая запускается только по ручному триггеру. Любые внешние ресурсы, с которыми взаимодействует dag, параметризуются датой выполнения {{ds_noda sh}}.

Недавно мы конвертировали этот тег для запуска по недельному расписанию, и я обнаружил, что воздушный поток "планировщик запускает запуск группы доступности базы данных в конце его периода планирования, а не в его начале". Я не ожидал этого вообще. Я не пытаюсь обсуждать дизайн планировщиков воздушного потока, но вместо этого я ищу несколько советов о том, как писать группы обеспечения доступности баз данных, которые работают как по ручному триггеру, так и по запланированному интервалу.

Вот мои конкретные c дилеммы:

  1. Чтобы обойти тот факт, что планировщик использует начало периода, я мог использовать {{next_ds_noda sh}}, но тогда сработавший вручную dag никогда не будет параметризован своей собственной датой исполнения
  2. Когда сработал вручную, мы хотели посмотреть другой файл 7 дней назад: {{execute_date - macros.timedelta (days = 7)) .strftime ("% Y% m% d")}}. Когда сработало расписание, теперь это выглядит как 14 дней в прошлом. Как я могу выполнить sh оба?

Я не ищу прямых решений для своих дилемм, но вместо этого задаюсь вопросом, действительно ли мое намерение запустить DAG по расписанию и вручную на самом деле полностью выпало обычного? Если нет, то каковы конкретные решения для моих дилемм c ИЛИ некоторые рекомендации по написанию групп доступности баз данных, которые можно вручную запускать и планировать.

1 Ответ

1 голос
/ 07 апреля 2020

Каждый раз, когда мне нужно было запустить группу обеспечения доступности баз данных по расписанию и , иногда вручную, я всегда ... создавал две группы доступности !

Я думаю, что это официальная рекомендация самого Airflow. Просто создайте две группы DAG и установите одну с недельным расписанием, например, schedule_interval = '0 5 * * 1' # Every Monday at 5:00, а другую с schedule_interval = None. Дайте им идентификаторы, такие как my_awesome_dag и my_awesome_dag_manual.

С помощью этой настройки вы можете поиграть и убедиться, что она всегда просматривает файл, который имеет отношение к этому execution_date. Затем вы можете оставить их обоих ON в GUI, и, хотя еженедельный будет срабатывать действительно каждую неделю, другой будет срабатывать только при нажатии кнопки воспроизведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...