Templating med Jinja

Introduktion till Apache Airflow i Python

Mike Metzger

Data Engineer

Vad är en mall?

  • Ett definierat format där Airflow automatiskt ersätter information
  • Ofta ren text eller textfiler
  • Förenklar åtkomst och återanvändning

 

Illustration av en mall med platshållare för ersatta värden

Introduktion till Apache Airflow i Python

Vad är Jinja?

  • Enkelt textbaserat mallspråk
  • Används i många verktyg utöver Airflow
  • {{ ... }} representerar en mallsubstitution
    • Liknar en Python f-sträng
  • Mer dynamisk användning, stöder for-loopar

Illustration av en Jinja-mall med dubbelklammer för substitution

Introduktion till Apache Airflow i Python

Airflow Jinja-funktioner

  • logical_date: När en DAG-körning inträffar
  • ds: logical_date i formatet YYYY-MM-DD
  • logical_date.year, logical_date.month, logical_date.day: Åtkomst till datumkomponenter
  • params: Körningsparametrarna för DAG-körningen
  • Beräkningar, loopar och mer
    • macros.ds_add: Möjliggör datumberäkningar
Introduktion till Apache Airflow i Python

Exempel med SmtpNotifier

  • Substitutioner i ämnesfältet
@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!
Introduktion till Apache Airflow i Python

Exempel med FileSensor

  • Konfigurera filsökvägen dynamiskt
  • Sök efter filer dagen före ds (logical_date i formatet YYYY-MM-DD)
  • Använd macros.ds_add
    filewatcher = FileSensor(
    task_id="wait_for_files",
    filepath="/data/{{ macros.ds_add(ds, -1) }}/input.csv",
    ...
    )
    
  • Om ds är 2026-04-30 blir filsökvägen /data/2026-04-29/input.csv
Introduktion till Apache Airflow i Python

Om Jinja

  • Kan inte användas överallt
  • Se dokumentationen för templated-attribut
  • Kontrollera kodvyn

Airflow DAG-kodvy som visar den skrivskyddade Python-källkoden som definierar DAG:en

Introduktion till Apache Airflow i Python

Nu kör vi en övning!

Introduktion till Apache Airflow i Python

Preparing Video For Download...