Aller au contenu

Planifier l'exécution d'un DAG

La planification de l'exécution des tâches est l'une des fonctionnalités phares d'Apache Airflow. Elle permet de définir quand et comment vos DAGs (Directed Acyclic Graphs) doivent s'exécuter, rendant vos workflows automatiques et fiables.

La fréquence d'exécution d'un DAG est définie par le paramètre schedule_interval. Si vous avez déjà utilisé un cron sur Linux, ce concept vous sera familier. Sinon, pas de panique, nous allons tout expliquer.

Voici un exemple d'utilisation dans un DAG Airflow :

Airflow DAG
# Packages
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.postgres_operator import PostgresOperator

# Define default_args and DAG
default_args = {
    "owner": "joekakone",
    "start_date": datetime(2024, 12, 1), # Use today date to avoid undesirable reruns
    "retries": 1,
    "retry_delay": timedelta(minutes=15),
    'email': ["joseph.kakone@gmail.com"],
    'email_on_failure': True,
    'email_on_retry': False,
}

# Create DAG instance
with DAG(
    dag_id="etl_sales",
    default_args=default_args,
    description="Sales ETL",
    schedule_interval="0 6 * * *",
    tags=["sales", "reporting", "daily", "critical"],
    catchup=False,
    max_active_runs=1,
) as dag:

    # Tasks
    start_task = DummyOperator(task_id="start")

    sql_task = PostgresOperator(
        task_id="sql_task",
        postgres_conn_id="postgres",
        sql=f"select edw.fn_rpt_performance_product('{RUN_DATE}'::date)",
        dag=dag,
    )

    end_task = DummyOperator(task_id="end")

    # Flow
    start_task >> sql_task >>  end_task

La syntaxe du schedule_interval est basée sur le format cron, qui permet de spécifier des exécutions avec précision. Voici la signification des champs :

Champ Valeur Signification
Minute 0-59 Minute exacte
Heure 0-23 Heure exacte
Jour du mois 1-31 Jour du mois
Mois 1-12 Mois
Jour de la semaine 0-6 Dimanche (0) à Samedi (6)

Exemple pour 0 6 * * * :

  • Minute : 0 (pile à l'heure)
  • Heure : 6 (6 heures du matin)
  • Tous les jours du mois
  • Tous les mois
  • Tous les jours de la semaine

Voici un guide visuel pour vous aider à mieux comprendre :

Pour simplifier la création de ces expressions, vous pouvez visiter Crontab Guru, un outil en ligne qui vous aide à définir et tester vos expressions cron.

Pour finir voici quelques exemples qui répondent à d'autres besoins spécifiques : Valeur | Signification -|- @hourly | Chaque heure @daily | Chaque jour 0 */4 * * * | Chaque quatre heure */15 * * * * | Chaque 15 minutes


Grâce à schedule_interval, vous pouvez automatiser l'exécution de vos workflows selon les besoins de votre projet. Dans la prochaine section, nous verrons comment gérer les dépendances entre les tâches pour structurer vos DAGs de manière optimale..