Planificarea DAG-urilor

Introducere în Apache Airflow în Python

Mike Metzger

Data Engineer

Rulări DAG

  • O instanță specifică a unui flux de lucru la un moment dat
  • Poate fi rulat manual sau prin schedule
  • Menține starea fiecărui flux și a sarcinilor din acesta
    • running
    • failed
    • success
1 https://airflow.apache.org/docs/stable/scheduler.html
Introducere în Apache Airflow în Python

Vizualizare Rulări DAG

Pagina Rulări DAG din Airflow cu rulările recente pentru toate DAG-urile

Introducere în Apache Airflow în Python

Starea Rulărilor DAG

Pagina Rulări DAG din Airflow cu coloana de stare pentru fiecare rulare

Introducere în Apache Airflow în Python

Detalii planificare

La planificarea unui DAG, există mai multe atribute importante:

  • start_date - Data/ora pentru prima rulare a DAG-ului
  • end_date - Atribut opțional pentru oprirea noilor instanțe DAG
    • start_date și end_date utilizează un obiect datetime(year, month, day), de ex.:
       from pendulum import datetime
       start_date=datetime(2026, 4, 10, tz="UTC")
      
Introducere în Apache Airflow în Python

Planificare

schedule reprezintă:

  • Frecvența de planificare a DAG-ului
  • Între start_date și end_date
  • Poate fi definit prin sintaxă cron, presetări integrate sau timedelta.
Introducere în Apache Airflow în Python

Sintaxa cron

Diagramă a sintaxei cron cu cele cinci câmpuri de timp separate prin spațiu

  • Din formatul Unix cron
  • 5 câmpuri separate printr-un spațiu
  • * reprezintă rularea la fiecare interval (ex. fiecare minut, fiecare zi)
  • Valorile dintr-un câmp pot fi separate prin virgulă
Introducere în Apache Airflow în Python

Exemple cron

Diagramă a sintaxei cron cu cele cinci câmpuri de timp separate prin spațiu

0 12 * * *              # Run daily at noon
* * 25 2 *              # Run once per minute on February 25
0,15,30,45 * * * *      # Run every 15 minutes
Introducere în Apache Airflow în Python

Presetări planificator Airflow

Presetare:

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

Echivalent cron:

  • 0 * * * *
  • 0 0 * * *
  • 0 0 * * 0
  • 0 0 1 * *
  • 0 0 1 1 *
1 https://airflow.apache.org/docs/stable/scheduler.html
Introducere în Apache Airflow în Python

Presetări speciale

Airflow are trei presetări speciale schedule:

  • None - Fără planificare, pentru DAG-uri declanșate manual
  • @once - Planificat o singură dată
  • @continuous - Rulează imediat după terminarea rulării anterioare
Introducere în Apache Airflow în Python

timedelta

  • Se poate folosi și pendulum.duration
  • duration(hours=6)
  • duration(minutes=30)
from pendulum import duration

@dag(
  dag_id="example_dag"
  schedule=duration(days=2)
)
Introducere în Apache Airflow în Python

Aplicarea planificărilor

  • Planificarea este definită pe DAG
  • Se utilizează parametrul schedule:
@dag(
  dag_id="example_dag",
  schedule="0 12 * * *"
)
@dag(
  dag_id="example_dag",
  schedule="@daily"     
)
Introducere în Apache Airflow în Python

Probleme de planificare

La planificarea unui DAG, Airflow va:

  • Aștepta trecerea unui interval complet după data de start
  • Planifica sarcina la start_date + schedule
'start_date': datetime(2026, 2, 25, tz="UTC")
'schedule': @daily

Cel mai devreme moment de rulare a DAG-ului este 26 februarie 2026

Introducere în Apache Airflow în Python

Să exersăm!

Introducere în Apache Airflow în Python

Preparing Video For Download...