Exécuter des tâches de manière conditionnelle dans un travail Azure Databricks

Par défaut, une tâche de travail s’exécute quand ses dépendances se sont exécutées, et que leurs exécutions ont toutes été réussies. Toutefois, vous pouvez également configurer les tâches d’un travail Azure Databricks pour qu’elles s’exécutent uniquement quand des conditions spécifiques sont remplies. Les travaux Azure Databricks prennent en charge les méthodes suivantes pour l’exécution de tâches de manière conditionnelle :

  • Vous pouvez spécifier des dépendances Exécuter si pour exécuter une tâche en fonction de l’état d’exécution des dépendances de la tâche. Par exemple, vous pouvez utiliser Run if pour exécuter une tâche même en cas d’échec d’une partie ou de toutes ses dépendances, ce qui permet à votre travail de reprendre après des défaillances, et de poursuivre son exécution.
  • La tâche basée sur une condition If/else permet d’exécuter une partie d’un DAG (graphe orienté acyclique) de travail en fonction des résultats d’une expression booléenne. La tâche If/else condition vous permet d’ajouter une logique de branchement à votre travail. Par exemple, exécutez des tâches de transformation uniquement si la tâche d’ingestion en amont ajoute de nouvelles données. Sinon, exécutez des tâches de traitement de données.

Ajouter la condition Run if d’une tâche

Vous pouvez configurer une condition Run if lorsque vous modifiez une tâche avec une ou plusieurs dépendances. Pour ajouter la condition à la tâche, sélectionnez-la dans le menu déroulant Dépendances Exécuter si de la configuration de tâche. La condition Run if est évaluée une fois toutes les dépendances de tâches effectuées. Vous pouvez également ajouter une condition Run if lorsque vous ajoutez une nouvelle tâche avec une ou plusieurs dépendances.

Options de condition Run if

Vous pouvez ajouter les conditions Run if suivantes à une tâche :

  • Réussite totale : toutes les dépendances ont été exécutées et ont réussi. Il s’agit de la condition par défaut pour exécuter une tâche. La tâche porte la marque Upstream failed si la condition n’est pas remplie.
  • Au moins une réussite : au moins une dépendance a réussi. La tâche porte la marque Upstream failed si la condition n’est pas remplie.
  • Aucun échec : aucune des dépendances n’a échoué et au moins une dépendance a été exécutée. La tâche porte la marque Upstream failed si la condition n’est pas remplie.
  • Terminés : la tâche est exécutée après l’exécution de toutes ses dépendances, quel que soit l’état des exécutions dépendantes. Cette condition vous permet de définir une tâche exécutée sans dépendre du résultat de ses tâches dépendantes.
  • Au moins un échec : au moins une dépendance a échoué. La tâche porte la marque Excluded si la condition n’est pas remplie.
  • Échec total : toutes les dépendances ont échoué. La tâche porte la marque Excluded si la condition n’est pas remplie.

Remarque

  • Les tâches configurées pour gérer les échecs portent la marque Excluded si leur condition Run if n’est pas remplie. Les tâches exclues sont ignorées et sont traitées comme réussies.
  • Si toutes les dépendances de tâche sont exclues, la tâche est également exclue, quelle que soit sa condition Run if.
  • Si vous annulez une exécution de tâche, l’annulation se propage aux tâches en aval, et les tâches ayant une condition Run if qui gère l’échec sont exécutées, par exemple pour vérifier qu’une tâche de nettoyage s’exécute quand une exécution de tâche est annulée.

Comment les travaux Azure Databricks déterminent-ils l’état d’exécution des travaux ?

Les travaux Azure Databricks déterminent si l’exécution d’un travail a réussi en fonction du résultat des tâches du nœud terminal du travail. Une tâche du nœud terminal est une tâche qui n’a aucune dépendance en aval. Une exécution de travail peut aboutir à l’un des trois résultats suivants :

  • Réussite : toutes les tâches ont réussi.
  • Réussite avec échecs : certaines tâches ont échoué, mais toutes les tâches du nœud terminal ont réussi.
  • Échec : une ou plusieurs tâches du nœud terminal ont échoué.

Ajouter une logique de branchement à votre travail avec la tâche If/else condition

Utilisez la tâche If/else condition pour exécuter une partie d’un DAG (graphe orienté acyclique) de travail en fonction d’une expression booléenne. L’expression se compose d’un opérateur booléen et d’une paire d’opérandes, où les opérandes peuvent référencer l’état d’un travail ou d’une tâche à l’aide de variables de paramètres de travail et de tâche, ou de valeurs de tâche.

Remarque

  • Les valeurs numériques et non numériques sont gérées différemment en fonction de l’opérateur booléen :
    • Les opérateurs == et != effectuent une comparaison de chaînes de leurs opérandes. Par exemple, 12.0 == 12 a la valeur false.
    • Les opérateurs >, >= et <= effectuent des comparaisons numériques de leurs opérandes. Par exemple, 12.0 >= 12 a la valeur true, et 10.0 >= 12 a la valeur false.
    • Seules les valeurs numériques, de chaîne et booléennes sont autorisées durant le référencement de valeurs de tâche dans un opérande. Tout autre type entraîne l’échec de l’expression de condition. Les types valeur non numériques sont sérialisés en chaînes, et sont traités comme des chaînes dans des expressions If/else condition. Par exemple, si une valeur de tâche a une valeur booléenne, elle est sérialisée en "true" ou "false".

Vous pouvez ajouter une tâche If/else condition quand vous créez un travail ou modifiez une tâche dans un travail existant. Pour configurer une tâche If/else condition :

  1. Dans le menu déroulant Type, sélectionnez If/else condition.
  2. Dans la première zone de texte Condition, entrez l’opérande à évaluer. L’opérande peut référencer une variable de paramètre de travail ou de tâche, ou une valeur de tâche.
  3. Sélectionnez un opérateur booléen dans le menu déroulant.
  4. Dans la deuxième zone de texte Condition, entrez la valeur permettant d’évaluer la condition.

Pour configurer les dépendances d’une tâche If/else condition :

  1. Sélectionnez la tâche If/else condition dans la vue de DAG, puis cliquez sur + Ajouter une tâche.
  2. Une fois que vous avez entré les détails de la tâche, cliquez sur Dépend de, puis sélectionnez <task-name> (true), où <task-name> correspond au nom de la tâche If/else condition.
  3. Répétez l’opération pour la condition ayant la valeur false.

Par exemple, supposons que vous ayez une tâche nommée process_records qui conserve un nombre d’enregistrements non valides dans une valeur nommée bad_records, et que vous souhaitiez brancher le traitement en fonction de la présence ou non d’enregistrements non valides. Pour ajouter cette logique à votre workflow, vous pouvez créer une tâche If/else condition avec une expression telle que {{tasks.process_records.values.bad_records}} > 0. Vous pouvez ensuite ajouter des tâches dépendantes en fonction des résultats de la condition.

Une fois l’exécution d’un travail contenant une tâche If/else condition effectuée, vous pouvez voir le résultat de l’expression ainsi que les détails de l’évaluation de cette expression quand vous visualisez les détails de l’exécution du travail dans l’IU.