Skip to content

Commit

Permalink
Document built in Timetables (#23099)
Browse files Browse the repository at this point in the history
  • Loading branch information
collinmcnulty authored Jun 30, 2022
1 parent ea09cb3 commit 056b8cf
Showing 1 changed file with 61 additions and 0 deletions.
61 changes: 61 additions & 0 deletions docs/apache-airflow/concepts/timetable.rst
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,64 @@ the schedule. Some examples are:
As such, Airflow allows for custom timetables to be written in plugins and used by
DAGs. An example demonstrating a custom timetable can be found in the
:doc:`/howto/timetable` how-to guide.

Built In Timetables
-------------------

Airflow comes with several common timetables built in to cover the most common use cases. Additional timetables
may be available in plugins.

CronDataIntervalTimetable
^^^^^^^^^^^^^^^^^^^^^^^^^

Set schedule based on a cron expression. Can be selected by providing a string that is a valid
cron expression to the ``schedule_interval`` parameter of a DAG as described in the :doc:`/concepts/dags` documentation.

.. code-block:: python
@dag(schedule_interval="0 1 * * 3") # At 01:00 on Wednesday.
def example_dag():
pass
DeltaDataIntervalTimetable
^^^^^^^^^^^^^^^^^^^^^^^^^^

Schedules data intervals with a time delta. Can be selected by providing a
:class:`datetime.timedelta` or ``dateutil.relativedelta.relativedelta`` to the ``schedule_interval`` parameter of a DAG.

.. code-block:: python
@dag(schedule_interval=datetime.timedelta(minutes=30))
def example_dag():
pass
EventsTimetable
^^^^^^^^^^^^^^^

Simply pass a list of ``datetime``\s for the DAG to run after. Useful for timing based on sporting
events, planned communication campaigns, and other schedules that are arbitrary and irregular but predictable.

The list of events must be finite and of reasonable size as it must be loaded every time the DAG is parsed. Optionally,
the ``restrict_to_events`` flag can be used to force manual runs of the DAG to use the time of the most recent (or very
first) event for the data interval, otherwise manual runs will run with a ``data_interval_start`` and
``data_interval_end`` equal to the time at which the manual run was begun. You can also name the set of events using the
``description`` parameter, which will be displayed in the Airflow UI.

.. code-block:: python
from airflow.timetables.events import EventsTimetable
@dag(
timetable=EventsTimetable(
event_dates=[
pendulum.datetime(2022, 4, 5, 8, 27, tz="America/Chicago"),
pendulum.datetime(2022, 4, 17, 8, 27, tz="America/Chicago"),
pendulum.datetime(2022, 4, 22, 20, 50, tz="America/Chicago"),
],
description="My Team's Baseball Games",
restrict_to_events=False,
),
)
def example_dag():
pass

0 comments on commit 056b8cf

Please sign in to comment.