Что такое logical date в Apache Airflow?

«Что такое logical date в Apache Airflow?» — вопрос из категории Apache Airflow, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Logical Date (ранее назывался execution_date) — это центральное понятие в Airflow, представляющее логическую дату и время, для которых выполняется DAG Run. Это НЕ фактическое время запуска задачи.

Ключевые моменты:

  • Это точка на временной шкале данных, которые задача должна обработать. Например, для ежедневного DAG, запущенного 10 января для обработки данных за 9 января, logical_date будет 2024-01-09.
  • Используется для шаблонизации через макросы (например, {{ ds }}, {{ logical_date }}).
  • Позволяет выполнять backfill (перезапуск) за прошлые периоды, сохраняя контекст обработки корректных данных.

Пример в коде задачи:

from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime

def process_data(**context):
    # logical_date доступен в контексте выполнения
    data_interval_end = context["logical_date"]
    print(f"Обрабатываю данные за период, заканчивающийся: {data_interval_end}")
    # Например, загружаем файл с именем data_2024-01-09.csv

with DAG('my_dag', start_date=datetime(2024, 1, 1), schedule='@daily') as dag:
    run_task = PythonOperator(
        task_id='process',
        python_callable=process_data
    )