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.

Voir aussi :

CREATE TASK , DROP TASK , SHOW TASKS

Dans ce chapitre :

Syntaxe

EXECUTE TASK <name>

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.

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.

  • 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.

Exemples

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

EXECUTE TASK mytask;
Revenir au début