Шаг 3 из 4

Про start_date и execution_date

В Apache Airflow есть 2 ключевые даты, которые нужно понимать.

  1. Start Date start_date
  2. Execution Date execution_date

Start Date это дата начала от которой следует начинать запускать DAG согласно расписания schedule_interval.

Execution Date это дата выполнения конкретного запуска. В примере выше у меня было 13 запусков (у вас их будет больше, т.к. курс вы будете изучать в другое время). 13 запусков, а значит 13 execution_date, а именно:

1. 20.01.2020
2. 21.01.2020
3. 22.01.2020
4. 23.01.2020
5. 24.01.2020
6. 25.01.2020
7. 26.01.2020
8. 27.01.2020
9. 28.01.2020
10. 29.01.2020
11. 30.01.2020
12. 31.01.2020
13. 01.02.2020

Execution date можно получить, обратившись к контексту выполнения. Контекст можно получить, вызвав функцию get_current_context. Для примера работы с execution_date я создал новый DAG по аналогии с предыдущим, но немного модифицировал код оператора:

import datetime as dt

from airflow.models import DAG
from airflow.operators.python import PythonOperator
from airflow.operators.python import get_current_context

default_args = {
    'owner': 'airflow',
    'start_date': dt.datetime(2021, 1, 20),
}

def even_only():
    context = get_current_context()
    execution_date = context['execution_date']

    if execution_date.day % 2 != 0:
        raise ValueError(f'Odd day: {execution_date}')

with DAG(dag_id='first_dag_execution_date',
         schedule_interval='@daily',
         default_args=default_args) as dag:

    even_only = PythonOperator(
        task_id='even_only',
        python_callable=even_only,
        dag=dag,
    )

Таски будут падать через день, т.е. каждый нечетный день.

Комментарии

А где за 27-е?)

На скриншоте второй сверху )

По какой ссылке хранятся эти логи?

Необходимо зайти в историю выполнения (кружки в главной интерфейсе)

В новой версии Airflow код чуть другой будет. Теперь эта дата называется logical date и достается она так get_current_context()['logical_date'], ну илиесли как автор показал context = get_current_context() execution_date = context['logical_date']

В более новых версиях Airflow разработчики стремились сделать систему более понятной. Переход от термина execution_date к logical_date помогает подчеркнуть, что дата указывает на запланированное время выполнения задачи, а не на момент фактического выполнения. Execution Date: Ранее использовавшийся термин мог подразумевать, что это дата фактического запуска, что вызывало путаницу. В новой версии системы фактическое время выполнения можно получить из других контекстов (например, через start_date или end_date. Возможно это кому то поможет. Всем Удачи!