Шаблонизация с помощью Jinja

Введение в Apache Airflow на Python

Mike Metzger

Data Engineer

Что такое шаблон?

  • Заданный формат, позволяющий Airflow автоматически подставлять данные
  • Чаще всего — обычный текст или текстовые файлы
  • Упрощает доступ и повторное использование

 

Иллюстрация шаблона с заполнителями для подставляемых значений

Введение в Apache Airflow на Python

Что такое Jinja?

  • Простой текстовый язык шаблонизации
  • Используется во многих инструментах помимо Airflow
  • {{ ... }} — обозначение подстановки в шаблоне
    • Аналог f-строки в Python
  • Поддерживает более сложные сценарии, включая циклы

Иллюстрация шаблона Jinja с подстановками в двойных фигурных скобках

Введение в Apache Airflow на Python

Функции Jinja в Airflow

  • logical_date: момент запуска DAG
  • ds: значение logical_date в формате YYYY-MM-DD
  • logical_date.year, logical_date.month, logical_date.day: компоненты даты
  • params: параметры запуска DAG
  • Вычисления, циклы и другие возможности
    • macros.ds_add: позволяет выполнять вычисления с датами
Введение в Apache Airflow на Python

Пример использования SmtpNotifier

  • Подстановки в поле темы
@dag(dag_id=`sales_etl`,
     on_failure_callback=SmtpNotifier(
         to='[email protected]',
         from_email='[email protected]',

subject='sales_etl on {{ logical_date }} has failed!' ) )
  • Subject: sales_etl on 2026-04-30 failed!
Введение в Apache Airflow на Python

Пример использования FileSensor

  • Динамическое задание пути к файлу
  • Поиск файлов за день до ds (logical_date в формате YYYY-MM-DD)
  • Используется macros.ds_add
    filewatcher = FileSensor(
    task_id="wait_for_files",
    filepath="/data/{{ macros.ds_add(ds, -1) }}/input.csv",
    ...
    )
    
  • Если ds равно 2026-04-30, путь к файлу будет /data/2026-04-29/input.csv
Введение в Apache Airflow на Python

Особенности Jinja

  • Подстановки работают не везде
  • Смотрите в документации атрибуты, помеченные как templated
  • Проверьте представление кода

Представление кода DAG в Airflow с исходным кодом Python, определяющим DAG

Введение в Apache Airflow на Python

Давайте потренируемся!

Введение в Apache Airflow на Python

Preparing Video For Download...