Modelos com Jinja

Introdução ao Apache Airflow em Python

Mike Metzger

Data Engineer

O que é um template?

  • Um formato definido que permite ao Airflow substituir infos automaticamente
  • Geralmente texto simples / arquivos de texto
  • Facilita acesso e reuso

 

Ilustração de um modelo com espaços reservados para valores substituídos

Introdução ao Apache Airflow em Python

O que é Jinja?

  • Linguagem simples de template baseada em texto
  • Usada em muitas ferramentas além do Airflow
  • {{ ... }} representa uma substituição de template
    • Similar a um f-string do Python
  • Uso mais dinâmico, suporta loops

Ilustração de um template Jinja usando substituições com chaves duplas

Introdução ao Apache Airflow em Python

Funções Jinja no Airflow

  • logical_date: quando uma execução do Dag ocorre
  • ds: a logical_date no formato YYYY-MM-DD
  • logical_date.year, logical_date.month, logical_date.day: componentes da data
  • params: parâmetros de execução do Dag run
  • Cálculos, loops e mais
    • macros.ds_add: permite cálculos de data
Introdução ao Apache Airflow em Python

Exemplo com SmtpNotifier

  • Substituições no campo de assunto
@dag(dag_id=`sales_etl`,
     on_failure_callback=SmtpNotifier(
         to='[email protected]',
         from_email='[email protected]',

subject='sales_etl on {{ logical_date }} has failed!' ) )
  • Assunto: sales_etl em 2026-04-30 falhou!
Introdução ao Apache Airflow em Python

Exemplo com FileSensor

  • Configure o filepath dinamicamente
  • Procure arquivos no dia anterior ao ds (logical_date em YYYY-MM-DD )
  • Use macros.ds_add
    filewatcher = FileSensor(
    task_id="wait_for_files",
    filepath="/data/{{ macros.ds_add(ds, -1) }}/input.csv",
    ...
    )
    
  • Se ds for 2026-04-30, o caminho será /data/2026-04-29/input.csv
Introdução ao Apache Airflow em Python

Notas sobre Jinja

  • Não funciona em todo lugar
  • Veja na documentação os atributos com template
  • Confira a visualização de código

Visualização de código do Dag no Airflow mostrando o código-fonte Python somente leitura que define o Dag

Introdução ao Apache Airflow em Python

Vamos praticar!

Introdução ao Apache Airflow em Python

Preparing Video For Download...