Шаблонизування з Jinja

Вступ до Apache Airflow на Python

Mike Metzger

Data Engineer

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

  • Визначений формат, що дозволяє Airflow автоматично підставляти дані
  • Зазвичай простий текст / текстові файли
  • Спрощує доступ і повторне використання

 

Ілюстрація шаблону з заповнювачами для підстановок

Вступ до Apache Airflow на Python

Що таке Jinja?

  • Проста мова шаблонів на основі тексту
  • Використовується багатьма інструментами, не лише в Airflow
  • {{ ... }} позначає підстановку у шаблоні
    • Схоже на f-рядок у Python
  • Підтримує динаміку: цикли for тощо

Ілюстрація шаблону 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!' ) )
  • Тема: 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...