Supposons que vous ayez un DAG de flux d’air qui n’a pas de sens pour le renvoi, ce qui signifie qu’après avoir été exécuté une fois, le faire rapidement par la suite serait totalement inutile.
Par exemple, si vous chargez des données provenant d'une source qui n'est mise à jour que toutes les heures dans votre base de données, le renvoi, qui se produit en succession rapide, importera simplement les mêmes données à plusieurs reprises.
Cela est particulièrement gênant lorsque vous instanciez une nouvelle tâche horaire et que celle-ci exécute N
nombre de fois pour chaque heure manquée, en effectuant un travail redondant, avant qu'elle ne soit exécutée à l'intervalle spécifié.
La seule solution à laquelle je puisse penser est quelque chose qu'ils ont expressément déconseillé dans FAQ de la documentation
Nous vous déconseillons d'utiliser des valeurs dynamiques comme date_début, en particulier
datetime.now()
car cela peut être assez déroutant.
Existe-t-il un moyen de désactiver le renvoi pour un DAG ou devrais-je procéder comme indiqué ci-dessus?
Passez à la version 1.8 de flux d'air et utilisez catchup_by_default = False dans le fichier airflow.cfg ou appliquez catchup = False à chacun de vos dags.
https://github.com/Apache/incubator-airflow/blob/master/UPDATING.md#catchup_by_default
Définir catchup = False dans votre déclaration dag fournira cette fonctionnalité exacte.
Je n'ai pas la "réputation" de commenter, mais je voulais dire que le rattrapage = Faux a été conçu (par moi) dans ce but précis. De plus, je peux vérifier que cela fonctionne dans la version 1.10.1 lorsqu'il est défini explicitement dans l'instanciation. Cependant, je ne le vois pas fonctionner lorsqu'il est placé dans les arguments par défaut. Cela fait 18 mois que je n’ai pas Airflow, c’est donc un peu avant que je puisse comprendre pourquoi les arguments par défaut ne fonctionnent pas.
dag = DAG('example_dag',
max_active_runs=3,
catchup=False,
schedule_interval=timedelta(minutes=5),
default_args=default_args)