Agendamento no Airflow

Introdução ao Apache Airflow em Python

Mike Metzger

Data Engineer

Execuções de DAG

  • Uma instância específica de um workflow em um momento
  • Pode rodar manualmente ou via schedule_interval
  • Mantém estado do workflow e das tasks
    • running
    • failed
    • success
1 https://airflow.apache.org/docs/stable/scheduler.html
Introdução ao Apache Airflow em Python

Visão de Execuções de DAG

Execuções de DAG

Introdução ao Apache Airflow em Python

Estado das Execuções de DAG

Estado das Execuções de DAG

Introdução ao Apache Airflow em Python

Detalhes do agendamento

Ao agendar um DAG, observe:

  • start_date - Data/hora inicial do agendamento
  • end_date - Opcional; quando parar novas instâncias
  • max_tries - Opcional; número de tentativas
  • schedule_interval - Frequência de execução
Introdução ao Apache Airflow em Python

Intervalo de agendamento

schedule_interval indica:

  • Com que frequência agendar o DAG
  • Entre start_date e end_date
  • Pode ser definido via sintaxe cron ou presets nativos
Introdução ao Apache Airflow em Python

Sintaxe do cron

Sintaxe do cron

  • Vem do formato cron do Unix
  • Tem 5 campos separados por espaço
  • Um asterisco * executa em todo intervalo (ex.: cada minuto, cada dia)
  • Pode ter valores separados por vírgula em um campo
Introdução ao Apache Airflow em Python

Exemplos de cron

0 12 * * *              # Executa diariamente ao meio-dia
* * 25 2 *              # Executa a cada minuto em 25 de fevereiro
0,15,30,45 * * * *      # Executa a cada 15 minutos
Introdução ao Apache Airflow em Python

Presets do agendador do Airflow

Presets:

  • @hourly
  • @daily
  • @weekly
  • @monthly
  • @yearly

cron equivalente:

  • 0 * * * *
  • 0 0 * * *
  • 0 0 * * 0
  • 0 0 1 * *
  • 0 0 1 1 *
1 https://airflow.apache.org/docs/stable/scheduler.html
Introdução ao Apache Airflow em Python

Presets especiais

O Airflow tem dois presets especiais de schedule_interval:

  • None - Nunca agenda; usado para DAGs manuais
  • @once - Agenda só uma vez
Introdução ao Apache Airflow em Python

Problemas com schedule_interval

Ao agendar um DAG, o Airflow vai:

  • Usar start_date como o menor valor
  • Agendar em start_date + schedule_interval
'start_date': datetime(2020, 2, 25),
'schedule_interval': @daily

Isso significa que o primeiro horário de execução é 26 de fevereiro de 2020

Introdução ao Apache Airflow em Python

Vamos praticar!

Introdução ao Apache Airflow em Python

Preparing Video For Download...