Airflow DAG работает ежедневно, исключая выходные? - PullRequest
0 голосов
/ 29 июня 2018

Можно ли создать DAG Airflow, которая запускается каждый день, кроме субботы и воскресенья? Кажется, что это невозможно, поскольку у вас есть только start_date и schedule_interval .

Я настраиваю рабочий процесс, который будет обрабатывать пакет файлов каждое утро. Файлы не будут присутствовать в выходные дни, но только с понедельника по пятницу. Я мог бы просто использовать настройку тайм-аута 24 часа, которая, по сути, составляет тайм-аут в субботу и воскресенье, потому что файл никогда не появится в те дни, но это пометит DAG как сбой в течение этих двух дней, и это будет очень приятно.

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

У меня была похожая потребность, и я положил ее в начале своих даг - она ​​похожа на ShortCircuitOperator.

import logging
from airflow.models import SkipMixin, BaseOperator
from airflow.utils.decorators import apply_defaults


class pull_file_decision_operator(BaseOperator, SkipMixin):

   template_fields = ('execution_date',)

   @apply_defaults
   def __init__(self,
                day_of_week, 
                hour_of_day,
                execution_date,
                **kwargs):

       self.day_of_week = day_of_week
       self.hour_of_week = hour_of_day
       self.execution_date = execution_date

   def execute(self, context):
       # https://docs.python.org/3/library/datetime.html#datetime.date.weekday

       run_dt = self.execution_date
       dow = self.day_of_week
       hod = self.hour_of_day

       if run_dt.weekday() == dow and run_dt.hour == hod:
          return True
       else:
          downstream_tasks = context['task'].get_flat_relatives(upstream=False)
          logging.info('Skipping downstream tasks...')
          logging.info("Downstream task_ids %s", downstream_tasks)

          if downstream_tasks:
             self.skip(context['dag_run'],
                       context['ti'].execution_date,
                       downstream_tasks)
0 голосов
/ 30 июня 2018

Ответ от Zack уже имеет расписание cron по будням, которое будет делать то, что вы хотите (0 0 * * 1-5), но я хотел добавить ответ с сайтом для примеров общих расписаний cron, хм, выражения crontab .

Я часто использую это с Airflow, чтобы придумать DAG's schedule_interval.

Основное приложение, которое поможет вам разработать расписание cron в интерактивном режиме, находится по адресу crontab.guru .

Пример только по графику рабочих дней - https://crontab.guru/every-weekday

Более распространенные примеры (например, каждые полчаса, каждый квартал и т. Д.) - https://crontab.guru/examples.html

0 голосов
/ 29 июня 2018

'schedule_interval': '0 0 * * 1-5' работает в 00:00 каждый день недели с понедельника по пятницу.

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