EXECUTE TASK

Déclenche manuellement une exécution unique asynchrone d’une tâche planifiée (soit une tâche autonome, soit la tâche racine d’un graphique de tâches) indépendamment 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 , DROP TASK , SHOW TASKS

Syntaxe

EXECUTE TASK <name>

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.

RETRY LAST

Réexécuter la dernière tâche échouée de Graphiques de tâches 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.

Pour consulter l’historique des tâches, voir la fonction de table TASK_HISTORY ou l’historique des tâches 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.

  • 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 Versionnage des exécutions.

  • 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 la tâche racine est en cours d’exécution (c’est-à-dire dans un état EXECUTING dans la sortie TASK_HISTORY), la commande EXECUTE TASK planifie une autre exécution de la tâche pour qu’elle démarre immédiatement après la fin de l’exécution en cours.

  • Si la tâche racine est actuellement planifiée (c’est-à-dire dans un état SCHEDULED dans la sortie TASK_HISTORY), l’exécution planifiée est remplacée par l’exécution demandée comme d’habitude, avec l’horodatage actuel comme heure planifiée. Toutefois, si l’heure planifiée est passée (mais que la tâche n’est pas encore passée à l’état EXECUTING), l’exécution planifiée a lieu comme d’habitude. C’est-à-dire que l’exécution planifiée n’est pas remplacée par l’exécution demandée.

  • Le paramètre ALLOW_OVERLAPPING_EXECUTION défini sur une tâche racine détermine si le chevauchement des instances du graphique de tâches est autorisé. Le comportement des exécutions de tâches demandées diffère en fonction de la valeur du paramètre :

    ALLOW_OVERLAPPING_EXECUTION = FALSE (valeur par défaut)

    Si aucune instance du graphique de tâches n’est en cours d’exécution, la commande EXECUTE TASK planifie une autre exécution du graphique de tâches qui démarrera immédiatement.

    Si la tâche racine ou toute autre tâche enfant du graphique de tâches est en cours d’exécution (c’est-à-dire dans un état EXECUTING dans la sortie TASK_HISTORY), la commande EXECUTE TASK planifie une autre exécution du graphiques de tâches qui démarrera immédiatement après la fin de l’exécution actuelle de la dernière tâche du graphique. Autrement dit, l’instance actuelle du graphique de tâches doit terminer son exécution avant que la tâche demandée ne commence.

    Si la tâche racine est actuellement planifiée (c’est-à-dire dans un état SCHEDULED dans la sortie TASK_HISTORY), l’exécution planifiée est remplacée par l’exécution demandée, avec l’horodatage actuel comme heure planifiée. Toutefois, si l’heure planifiée est passée (mais que la tâche n’est pas encore passée à l’état EXECUTING), l’exécution planifiée a lieu. C’est-à-dire que l’exécution planifiée n’est pas remplacée par l’exécution demandée.

    ALLOW_OVERLAPPING_EXECUTION = TRUE

    Si aucune instance du graphique de tâches n’est en cours d’exécution, ou si seules les tâches enfants du graphique sont en cours d’exécution dans une instance, la commande EXECUTE TASK planifie une autre exécution du graphique qui doit démarrer immédiatement.

    Si la tâche racine est en cours d’exécution dans une instance du graphique de tâches, la commande EXECUTE TASK planifie une autre exécution du graphique pour qu’elle démarre immédiatement après la fin de l’exécution actuelle de la tâche racine.

    Si la tâche racine est actuellement planifiée (c’est-à-dire dans un état SCHEDULED dans la sortie TASK_HISTORY) dans une instance de graphique de tâches, l’exécution planifiée est remplacée par l’exécution demandée comme d’habitude, avec l’horodatage actuel comme heure planifiée. Toutefois, si l’heure planifiée est passée (mais que la tâche n’est pas encore passée à l’état EXECUTING), l’exécution planifiée a lieu. C’est-à-dire que l’exécution planifiée n’est pas remplacée par l’exécution demandée.

  • Alors que les appels à la commande EXECUTE TASK sont traités de manière synchrone, l’exécution des tâches est une opération asynchrone.

  • Les exécutions de tâches déclenchées par cette commande SQL utilisent la version de la tâche qui était en cours au moment de l’exécution de la commande. Si une tâche est modifiée après l’exécution de la commande, mais avant le début de l’exécution, les modifications ne sont pas appliquées avant la prochaine exécution planifiée.

    Si cette commande SQL est exécutée plusieurs fois alors qu’une exécution de la tâche est en cours, toutes les exécutions de la commande, sauf la dernière, sont ignorées. Lorsque l’exécution suivante commence, la version de la tâche qui était en cours lors de la dernière exécution est utilisé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 à Activation des notifications d’erreur des tâches.

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

    • Ouvrir Snowsight et sélectionner Monitoring » Task History.

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

Exemples

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

EXECUTE TASK mytask;
Copy