Szablonowanie z Jinja

Wprowadzenie do Apache Airflow w Pythonie

Mike Metzger

Data Engineer

Czym jest szablon?

  • Zdefiniowany format umożliwiający automatyczne podstawianie wartości przez Airflow
  • Często zwykły tekst / pliki tekstowe
  • Upraszcza dostęp i ponowne użycie

 

Ilustracja szablonu z polami zastępczymi dla podstawianych wartości

Wprowadzenie do Apache Airflow w Pythonie

Czym jest Jinja?

  • Prosty tekstowy język szablonów
  • Używany w wielu narzędziach poza Airflow
  • {{ ... }} oznacza podstawienie szablonu
    • Podobne do f-stringa w Pythonie
  • Bardziej dynamiczne zastosowania, obsługuje pętle

Ilustracja szablonu Jinja z podstawieniami w podwójnych nawiasach klamrowych

Wprowadzenie do Apache Airflow w Pythonie

Funkcje Jinja w Airflow

  • logical_date: Moment uruchomienia DAG-a
  • ds: logical_date w formacie YYYY-MM-DD
  • logical_date.year, logical_date.month, logical_date.day: Składniki daty
  • params: Parametry wykonania DAG-a
  • Obliczenia, pętle i więcej
    • macros.ds_add: Umożliwia obliczenia na datach
Wprowadzenie do Apache Airflow w Pythonie

Przykład z SmtpNotifier

  • Podstawienia w polu tematu
@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!
Wprowadzenie do Apache Airflow w Pythonie

Przykład z FileSensor

  • Dynamiczna konfiguracja ścieżki pliku
  • Szukaj plików z dnia poprzedzającego ds (logical_date w formacie YYYY-MM-DD)
  • Użyj macros.ds_add
    filewatcher = FileSensor(
    task_id="wait_for_files",
    filepath="/data/{{ macros.ds_add(ds, -1) }}/input.csv",
    ...
    )
    
  • Jeśli ds wynosi 2026-04-30, ścieżka będzie /data/2026-04-29/input.csv
Wprowadzenie do Apache Airflow w Pythonie

Uwagi o Jinja

  • Nie można używać wszędzie
  • Sprawdź dokumentację dla atrybutów szablonowych
  • Sprawdź widok kodu

Widok kodu DAG-a w Airflow pokazujący źródło Python definiujące DAG-a w trybie tylko do odczytu

Wprowadzenie do Apache Airflow w Pythonie

Czas na ćwiczenia!

Wprowadzenie do Apache Airflow w Pythonie

Preparing Video For Download...