EXECUTE TASK

Déclenche manuellement une exécution unique asynchrone d’une tâche (soit une tâche autonome, soit la tâche racine d’un graphique de tâches) indépendante de la planification définie pour la tâche.

L’exécution réussie d’une tâche racine déclenche l’exécution en cascade des tâches enfants du graphique de tâches à mesure que leur tâche précédente se termine, comme si la tâche racine s’était exécutée selon sa planification définie.

En outre, vous pouvez déclencher manuellement la réexécution d’une tâche qui a précédemment échoué.

Voir aussi :

CREATE TASK , DESCRIBE TASK , ALTER TASK , DROP TASK , SHOW TASKS

Syntaxe

EXECUTE TASK <name>
  [ USING CONFIG = <configuration_string> ]

EXECUTE TASK <name> RETRY LAST
Copy

Paramètres

name

Identificateur de la tâche autonome ou de la tâche racine à exécuter. Si l’identificateur contient des espaces ou des caractères spéciaux, toute la chaîne doit être délimitée par des guillemets doubles. Les identificateurs entre guillemets doubles sont également sensibles à la casse.

USING CONFIG = configuration_string

Spécifie une chaîne de configuration au format JSON valide pour cette seule exécution. Ce paramètre crée une nouvelle exécution avec la configuration dynamiquement spécifiée, mais ne modifie pas la définition de la tâche.

Snowflake fusionne la configuration dynamique avec la configuration par défaut, à savoir le paramètre CONFIG que vous avez défini dans la définition de la tâche avec CREATE ou ALTER. Pour les champs correspondants, Snowflake utilise les valeurs spécifiées dynamiquement. Pour les champs ne correspondant pas, Snowflake utilise les valeurs de la configuration par défaut. Pour un exemple, voir Utiliser un paramètre CONFIG dynamique.

La chaîne de configuration suit le même format que le paramètre CONFIG dans CREATE TASK ou ALTER TASK :

CONFIG = $${"string1": value1 [, "string2": value2, ...] }$$
Copy

Example:

CONFIG = $${"learning_rate": 0.2, "environment": "testing"}$$
Copy
RETRY LAST

Réexécuter la dernière tâche échouée du graphique de tâche <label-task_dag> avec name en reprenant à l’endroit où les tâches ont échoué.

Pour réexécuter une tâche, les conditions suivantes doivent être remplies :

  • La dernière exécution du graphique de tâches doit être dans l’état FAILED ou CANCELED.

  • Le graphique de tâches ne doit pas avoir été modifié depuis sa dernière exécution.

  • Le graphique de tâches doit avoir été exécuté ou retenté au cours des 14 derniers jours.

To view task history, see either the TASK_HISTORY table function or the Tasks page on Snowsight.

Note

RETRY LAST crée une nouvelle exécution du graphique qui commence l’exécution à la dernière tâche ayant échoué.

Plus précisément, toutes les tâches FAILED ou CANCELED sont immédiatement réexécutées, et les tâches enfant associées sont planifiées si tous leurs prédécesseurs s’exécutent avec succès.

En outre, la nouvelle exécution du graphique de tâches produite par la nouvelle tentative aura un ATTEMPT NUMBER supérieur d’une unité à l’exécution graphique précédente qui a échoué, et partagera le même GRAPH_RUN_GROUP_ID que l’exécution du graphique de tâches réessayée ou d’origine.

Notes sur l’utilisation

  • L’exécution d’une tâche requiert le privilège OWNERSHIP ou OPERATE sur la tâche.

    Lorsqu’une commande EXECUTE TASK déclenche l’exécution d’une tâche, Snowflake vérifie que le rôle avec le privilège OWNERSHIP sur la tâche qui possède également le privilège USAGE sur l’entrepôt affecté à la tâche, ainsi que le privilège global EXECUTE TASK ; sinon, une erreur se produit.

    Les tâches s’exécutent toujours avec les privilèges du rôle de propriétaire d’origine, même si un rôle différent avec le privilège OPERATE utilise EXECUTE TASK pour exécuter la tâche.

  • Par défaut, Snowflake exécute des tâches via l’utilisateur système avec les privilèges du rôle de propriétaire de la tâche. Pour exécuter une tâche en tant qu’utilisateur spécifique, configurez la tâche avec EXECUTE AS USER. Pour plus d’informations, voir Exécuter des tâches avec des privilèges d’utilisateur.

  • Pour l’option USING CONFIG :

    • Si le graphique des tâches est en cours d’exécution et que vous exécutez cette commande, Snowflake attend la fin de l’exécution en cours avant de lancer une nouvelle exécution avec la configuration dynamique.

    • Si vous exécutez cette commande plusieurs fois pendant l’exécution d’une tâche, Snowflake utilise la configuration de la commande la plus récente pour l’exécution suivante. Les configurations précédentes sont remplacées et ne seront pas exécutées.

    • La configuration dynamique ne s’applique qu’à la seule exécution déclenchée par cette commande. Les exécutions planifiées suivantes utilisent le paramètreCONFIG par défaut de la définition de la tâche.

  • La commande SQL ne peut exécuter qu’une tâche autonome ou la tâche racine dans un graphique de tâches. Si une tâche enfant est saisie, la commande renvoie une erreur utilisateur.

  • L’exécution manuelle d’une tâche autonome ou racine établit une version de la tâche. La tâche autonome ou l’ensemble du graphique de tâches termine son exécution avec cette version. Pour plus d’informations sur les versions de tâches, voir Gestion des versions des exécutions de tâches.

  • Une tâche racine suspendue est exécutée sans que la tâche soit reprise ; il n’est pas nécessaire de reprendre explicitement la tâche racine avant d’exécuter cette commande SQL. Cependant, EXECUTE TASK ne permet pas la reprise automatique des tâches enfants dans le graphique de tâches. La commande ignore les tâches enfants qui sont suspendues.

    Pour reprendre de manière récursive toutes les tâches dépendantes liées à une tâche racine dans un graphique de tâches, interrogez la fonction SYSTEM$TASK_DEPENDENTS_ENABLE plutôt que d’activer chaque tâche individuellement (à l’aide de ALTER TASK … RESUME).

    Lors du test de nouveaux graphiques de tâches ou de graphiques de tâches modifiés, il est recommandé de configurer la tâche racine pour qu’elle s’exécute selon une planification de production prévue , mais de la laisser dans un état de suspension. Lorsque vous avez testé le graphique de tâches avec succès, reprenez la tâche racine. Notez que vous devez reprendre toutes les tâches enfant suspendues dans le graphique de tâches pour les tester, sinon, elles sont ignorées lors des exécutions du graphique de tâches.

  • Si aucune instance de la tâche n’est en cours d’exécution, une nouvelle exécution démarre immédiatement.

  • Si une autre instance est planifiée (c’est-à-dire si la tâche affiche l’état SCHEDULED dans la sortie TASK_HISTORY), l’exécution demandée remplace l’exécution planifiée. L’exécution demandée démarre immédiatement en suivant l’horodatage actuel comme heure de planification.

  • Si la tâche ou le graphique de tâche est actuellement en file d’attente ou en cours d’exécution (c’est-à-dire si la tâche affiche l’état EXECUTING dans la sortie TASK_HISTORY), l’exécution en cours se poursuit en utilisant la version de tâche qui était en cours au moment de l’exécution de la commande. Une nouvelle exécution est ensuite planifiée, à une heure qui dépend du type de tâche :

    • Pour les tâches autonomes, le démarrage d’une nouvelle exécution est planifié à la fin de l’exécution en cours.

    • Pour les graphiques de tâches :

      • Si ALLOW_OVERLAPPING_EXECUTION = FALSE (valeur par défaut), le démarrage d’une nouvelle exécution est planifié à la fin du graphique de tâche en cours.

      • Si ALLOW_OVERLAPPING_EXECUTION = TRUE et si la tâche en cours d’exécution est une tâche racine, le démarrage d’une nouvelle exécution est planifié à la fin de la tâche racine.

      • Si ALLOW_OVERLAPPING_EXECUTION = TRUE et si la tâche en cours d’exécution est une tâche enfant, une nouvelle exécution démarre immédiatement.

    Si la commande EXECUTE TASK est exécutée de nouveau avant le début de l’exécution planifiée suivante, l’exécution demandée remplace l’exécution planifiée.

  • Si une tâche échoue avec une erreur inattendue, vous pouvez recevoir une notification concernant l’erreur. Pour plus d’informations sur la configuration des notifications d’erreur de tâche, reportez-vous à Activer les notifications pour les tâches.

  • Pour voir les informations sur la tâche, vous pouvez soit :

    • Dans l’Snowsight, dans le menu de navigation, sélectionnez Transformation » Tasks.

    • Appeler la fonction de table COMPLETE_TASK_GRAPHS et examiner les résultats.

Exemples

Les exemples suivants montrent comment déclencher manuellement une exécution de tâche et comment utiliser un paramètre CONFIG dynamique.

Manually trigger a task run

Déclencher manuellement l’exécution d’une tâche nommée mytask :

EXECUTE TASK mytask;
Copy

Utiliser un paramètre CONFIG dynamique

Créez une tâche racine nommée my_root_task avec une configuration par défaut :

CREATE OR REPLACE TASK my_root_task
  WAREHOUSE = regress
  SCHEDULE = '10 m'
  CONFIG = $${
    "environment": "production",
    "output_paths": {
      "logs": "/prod/logs",
      "results": "/prod/results"
    }
  }$$
  AS ...;
Copy

Maintenant, exécutez la tâche et spécifiez une configuration dynamique :

EXECUTE TASK my_root_task
  USING CONFIG=$${
    "output_paths": {
      "results": "/temp/testing"
    }
  }$$;
Copy

L’exemple suivant montre la configuration résultante pour cette exécution :

{
  "environment": "production",
  "output_paths": {
    "logs": "/prod/logs",
    "results": "/temp/testing"
  }
}
Copy

Le champ environment et le champ output_paths.logs restent inchangés par rapport à la configuration par défaut ; seul output_paths.results est mis à jour avec la valeur dynamique.