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 DAG (graphe orienté acyclique) 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 DAG à 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 DAG 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 DAG doit être dans l’état FAILED ou CANCELED.

  • Le DAG ne doit pas avoir été modifié depuis sa dernière exécution.

  • Le DAG 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 DAG 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 DAG 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 DAG. 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 DAG 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 DAG. 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 DAG, 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 DAGs nouveaux ou 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 DAG avec succès, reprenez la tâche racine. Notez que vous devez reprendre toutes les tâches enfant suspendues dans le DAG pour les tester, sinon, elles sont ignorées lors des exécutions du DAG.

  • 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 DAG 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 DAG n’est en cours d’exécution, la commande EXECUTE TASK planifie une autre exécution du DAG qui démarrera immédiatement.

    Si la tâche racine ou toute autre tâche enfant du DAG 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 DAG qui démarrera immédiatement après la fin de l’exécution actuelle de la dernière tâche du DAG. Autrement dit, l’instance actuelle du DAG 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 DAG n’est en cours d’exécution, ou si seules les tâches enfants du DAG sont en cours d’exécution dans une instance, la commande EXECUTE TASK planifie une autre exécution du DAG qui doit démarrer immédiatement.

    Si la tâche racine est en cours d’exécution dans une instance du DAG, la commande EXECUTE TASK planifie une autre exécution du DAG 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 du DAG, 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 pour des tâches.

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

    • Ouvrir Snowsight et sélectionner Activity » 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