web-dev-qa-db-fra.com

Comment empêcher le flux d'air de remblayer les passes?

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?

34
m0meni

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

29
sage88

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)
0
Ben Tallman