Šablonování s Jinja

Úvod do Apache Airflow v Pythonu

Mike Metzger

Data Engineer

Co je šablona?

  • Definovaný formát umožňující Airflow automaticky dosazovat hodnoty
  • Většinou prostý text / textové soubory
  • Zjednodušuje přístup a opakované použití

 

Ilustrace šablony se zástupnými symboly pro dosazované hodnoty

Úvod do Apache Airflow v Pythonu

Co je Jinja?

  • Jednoduchý textový šablonovací jazyk
  • Používán v mnoha nástrojích mimo Airflow
  • {{ ... }} označuje substituci šablony
    • Podobné Pythonovskému f-stringu
  • Dynamičtější využití, podpora smyček

Ilustrace Jinja šablony s dosazením pomocí dvojitých složených závorek

Úvod do Apache Airflow v Pythonu

Airflow Jinja funkce

  • logical_date: Kdy proběhne spuštění DAGu
  • ds: logical_date ve formátu YYYY-MM-DD
  • logical_date.year, logical_date.month, logical_date.day: Přístup ke složkám data
  • params: Parametry běhu DAGu za chodu
  • Výpočty, smyčky a další
    • macros.ds_add: Umožňuje výpočty s daty
Úvod do Apache Airflow v Pythonu

Příklad s SmtpNotifier

  • Substituce v poli předmětu
@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!
Úvod do Apache Airflow v Pythonu

Příklad s FileSensor

  • Dynamická konfigurace cesty k souboru
  • Hledání souborů den před ds (logical_date ve formátu YYYY-MM-DD)
  • Použití macros.ds_add
    filewatcher = FileSensor(
    task_id="wait_for_files",
    filepath="/data/{{ macros.ds_add(ds, -1) }}/input.csv",
    ...
    )
    
  • Pokud je ds 2026-04-30, cesta bude /data/2026-04-29/input.csv
Úvod do Apache Airflow v Pythonu

Poznámky k Jinja

  • Nelze použít všude
  • Viz dokumentace pro šablonované atributy
  • Zkontrolujte zobrazení kódu

Zobrazení kódu Airflow DAG s Python zdrojem definujícím DAG v režimu pouze pro čtení

Úvod do Apache Airflow v Pythonu

Pojďme procvičovat!

Úvod do Apache Airflow v Pythonu

Preparing Video For Download...