Aller au contenu

Jobs et workflows

C’est la frontière entre une plateforme et un datalab : un datalab exécute quand vous êtes devant l’écran, une plateforme exécute quand vous n’y êtes pas.

Chaque job a un type, qui décide de ce qu’il exécute et de l’image dans laquelle il tourne.

Type Ce qu’il exécute Image
python un script ou un paquet Python, dépendances installées au démarrage python
bash une commande shell, pour les tâches d’exploitation toolbox
spark un traitement Spark (spark-submit), dimensionné par type d’instance spark-py
lowcode un graphe de l’éditeur low-code, traduit en code python

Le contrat porte aussi des types spécialisés — docker, dbt, dask, flink, ray —, chacun servi par sa propre image d’exécution. Un type dont l’image n’est pas configurée sur votre installation répond 501 feature_disabled (voir images de runtime).

La création d’un job, pas à pas et en commandes, est dans le démarrage rapide.

Un job lancé produit un run. Pendant son exécution, quatre choses sont lisibles :

  • les logs, paginés par curseur — la console les suit en direct, un client d’API les rejoue depuis n’importe quel point ;
  • les événements, horodatés : mise en file, démarrage, étape, fin ;
  • les métriques du conteneur ;
  • les fichiers produits, dans le bucket du projet.

Un run porte un statut (en file, en cours, réussi, échec, annulé, nouvelle tentative, ignoré) et une durée. C’est ce que montre la liste des jobs.

Un job porte aussi son délai maximal (timeout_seconds) et son nombre de reprises (max_retries) : un run qui échoue est relancé automatiquement jusqu’à ce nombre.

Un workflow enchaîne des étapes en graphe : chaque étape est un job, les dépendances sont des arêtes. Une étape en échec arrête la branche qui en dépend sans emporter les autres.

Un workflow ou un job se déclenche :

  • à la main, depuis la console, l’API ou un agent ;
  • par une planification cron standard — sur un job, elle se pose par JSON Patch sur le champ schedule (exemple sur la page API REST) ;
  • sur un événement : l’arrivée d’un fichier, la fin d’un autre workflow.

Les backfills rejouent un job planifié sur une plage de dates passées, et chaque run reçoit la date logique qu’il traite.