Tous vos types de job
Python, Spark, SQL, bash, notebooks, SAS et dbt, chacun dans son image d’exécution, avec ses bibliothèques et ses secrets.
Orchestration et calcul
Un job se déclare en quelques champs, un workflow s’assemble en graphe de dépendances, et la planification se règle sans une ligne de YAML. Chaque run s’exécute dans votre Kubernetes, à la taille que vous avez choisie, et se suit en direct.


Un run suivi en direct : qui l’a déclenché, sur quelles ressources, à quelle tentative, et ses logs ligne à ligne.
Interface réelle de la console graal, non retouchée ; données de démonstration fictives (locataire energie-demo — personnes, projets et jetons inventés).
Capacités clés
Python, Spark, SQL, bash, notebooks, SAS et dbt, chacun dans son image d’exécution, avec ses bibliothèques et ses secrets.
Vous enchaînez des jobs de types différents, vous posez les dépendances, et chaque étape se relance seule en cas d’échec.
Une expression cron, l’arrivée d’un fichier dans un bucket, ou un rattrapage sur une plage de dates : chaque run connaît sa date logique.
Nombre de tentatives et durée maximale par job ; une alerte part à l’échec ou au succès, vers les destinataires que vous choisissez.
Un driver et ses workers, créés pour le run et détruits après lui, sur votre Kubernetes. Aucun cluster Spark permanent à entretenir.
Vous choisissez un type d’instance par job, GPU compris. Les quotas du projet bornent ce qu’un run peut demander.
Comment ça marche
Étape 01
Un type, un fichier de code, une image, un type d’instance. Les paramètres et les secrets sont injectés par référence.
Étape 02
Vous reliez les jobs en workflow et choisissez le déclencheur : cron, événement, ou lancement à la demande.
Étape 03
Logs en direct, événements étape par étape, fichiers produits et métriques : chaque run garde sa trace.
Un run naît avec ses propres conteneurs, son identité et ses règles réseau, et disparaît avec eux. Il ne voit que les secrets de son projet et ne joint que les destinations autorisées. Les conteneurs tournent sans privilèges, sous le profil de sécurité restreint de Kubernetes.
Les cron, les déclencheurs et les workflows sont tenus par graal lui-même, pas par un ordonnanceur de plus à installer. Une planification se modifie dans la console, par l’API ou par un agent, et prend effet au prochain déclenchement.
Standards et intégrations
Gouvernance
Oui. Un script Python, un job Spark ou un projet dbt se dépose tel quel ; vos enchaînements se recréent en workflow.
Non. Spark s’exécute sur votre Kubernetes, dimensionné run par run : un driver et ses workers, puis plus rien.
Il est relancé selon le nombre de tentatives prévu. S’il échoue encore, l’alerte part, et ses logs vous attendent dans la console.
Par un backfill : vous choisissez une plage de dates, graal crée un run par date, sans doublon, sous les quotas du projet.
Un job, un workflow à deux étapes, une planification : en démonstration, de bout en bout.