Catégories :

DDL de pipeline de données

ALTER TASK

Modifie les propriétés d’une tâche existante.

Voir aussi :

CREATE TASK , DROP TASK , SHOW TASKS

Dans ce chapitre :

Syntaxe

ALTER TASK [ IF EXISTS ] <name> RESUME | SUSPEND

ALTER TASK [ IF EXISTS ] <name> REMOVE AFTER <string> | ADD AFTER <string>

ALTER TASK [ IF EXISTS ] <name> SET { [ WAREHOUSE = <string> ] [ SCHEDULE = '{ <number> MINUTE | USING CRON <expr> <time_zone> }' ] }

ALTER TASK [ IF EXISTS ] <name> SET { [ <session_parameter> = <value> [ , <session_parameter> = <value> ... ] ] }

ALTER TASK [ IF EXISTS ] <name> UNSET { <property_name> | <session_parameter> } [ , ... ]

ALTER TASK [ IF EXISTS ] <name> MODIFY AS <sql>

ALTER TASK [ IF EXISTS ] <name> MODIFY WHEN <boolean_expr>

Paramètres

nom

Identificateur de la tâche à modifier. 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.

RESUME | SUSPEND

Spécifie l’action à effectuer sur la tâche :

  • RESUME amène une tâche suspendue à un état « démarré » utilisable. Notez que les comptes sont actuellement limités à un maximum de 10 000 tâches reprises (c.-à-d. dans un statut « Démarré »).

  • SUSPEND met la tâche dans un état « suspendu ».

Si la planification de la tâche est définie sur un intervalle (c’est-à-dire un numéro MINUTE), pour éviter toute ambiguïté, la durée de l’intervalle de base de la planification est réinitialisée à l’heure actuelle lorsque la tâche est reprise.

L’intervalle de base démarre le compteur d’intervalle à partir de l’heure actuelle. Par exemple, si une valeur INTERVAL de 10 est définie et que la tâche est reprise à 9:03 AM, elle s’exécute à 9:13 AM, 9:23 AM, etc. Notez que nous faisons de notre mieux pour assurer une précision absolue, mais nous garantissons uniquement que les tâches ne s’exécutent pas avant que leur intervalle défini ne soit exécuté (par exemple, dans cet exemple, la tâche pourrait d’abord être exécutée à 9:14 AM, mais ne fonctionnera certainement pas à 9:12 AM).

REMOVE AFTER chaîne

Spécifie le nom du prédécesseur actuel pour cette tâche enfant. Utilisez ce paramètre pour supprimer le prédécesseur actuel de la tâche spécifiée avant d’ajouter un nouveau prédécesseur à l’aide de ALTER TASK … ADD AFTER. La tâche enfant est suspendue automatiquement.

Dans une simple arborescence de tâches, une tâche enfant est déclenchée lorsque le prédécesseur est exécuté et se termine avec succès. Pour plus d’informations, voir la description du paramètre AFTER dans CREATE TASK.

Lorsque le prédécesseur d’une tâche enfant est supprimé, l’ancienne tâche enfant devient alors une tâche autonome ou une tâche racine, selon que d’autres tâches identifient cette ancienne tâche enfant comme leur prédécesseur. Cette tâche est suspendue par défaut et doit être reprise manuellement.

ADD AFTER chaîne

Spécifie le nom d’un nouveau prédécesseur pour cette tâche enfant. Utilisez ce paramètre pour ajouter un prédécesseur à la tâche spécifiée après la suppression du prédécesseur actuel à l’aide de ALTER TASK … REMOVE AFTER.

SET ...

Spécifie l’un ou les deux éléments suivants :

  • Spécifie une (ou plusieurs) propriétés à définir pour la tâche (séparées par des espaces, des virgules ou de nouvelles lignes). Pour plus de détails sur les propriétés que vous pouvez définir, voir CREATE TASK.

  • Liste de paramètres de session séparés par des virgules à définir pour la session lorsque la tâche est exécutée. Une tâche prend en charge tous les paramètres de session. Pour obtenir la liste complète, voir Paramètres.

UNSET ...

Spécifie une (ou plusieurs) propriété(s) et/ou paramètres de session à désactiver pour la tâche, ce qui les réinitialise aux valeurs par défaut.

Vous pouvez réinitialiser plusieurs propriétés/paramètres avec une seule instruction ALTER ; cependant, chaque propriété/paramètre doit être séparé(e) par une virgule. Lors de la réinitialisation d’une propriété ou d’un paramètre, spécifiez seulement le nom ; si vous spécifiez une valeur pour la propriété/le paramètre, vous obtiendrez une erreur.

sql

Spécifie une seule instruction SQL ou un appel à une procédure stockée, exécutée lors de l’exécution de la tâche.

Note

Vérifiez que l’instruction SQL ou la procédure stockée à laquelle vous faites référence dans une tâche s’exécute comme prévu avant de créer la tâche. Les tâches sont destinées à automatiser les instructions SQL et les procédures stockées qui ont déjà été testées de manière approfondie.

WHEN expr_booléenne

Spécifie une expression booléenne SQL. Lorsqu’une tâche est déclenchée (en fonction de son paramètre SCHEDULE ou AFTER), elle valide les conditions de l’expression pour déterminer si elle doit être exécutée. Si les conditions de l’expression ne sont pas remplies, la tâche ignore l’exécution en cours. Aucune tâche identifiant cette tâche en tant que prédécesseur ne s’exécute pas non plus.

La validation des conditions de l’expression WHEN ne nécessite pas d’entrepôt virtuel mais utilise une petite quantité de traitement dans la couche de services Cloud. Une charge nominale s’accumule chaque fois qu’une tâche évalue sa condition WHEN et ne s’exécute pas. Les charges s’accumulent chaque fois que la tâche est déclenchée jusqu’à son exécution ; à ce moment, la charge est convertie en crédits Snowflake et ajoutée à l’utilisation des ressources de calcul pour l’exécution de la tâche.

Actuellement, la fonction suivante est prise en charge pour l’évaluation dans l’expression SQL :

SYSTEM$STREAM_HAS_DATA

Indique si un flux spécifié contient des données de suivi des modifications. Utilisé pour ignorer l’exécution de la tâche en cours si le flux ne contient aucune donnée de modification.

Si le résultat est FALSE, la tâche ne s’exécute pas.

Notes sur l’utilisation

  • La reprise ou la suspension d’une tâche (avec ALTER TASK … RESUME ou ALTER TASK … SUSPEND, respectivement) requiert le privilège OWNERSHIP ou OPERATE sur la tâche.

    Lorsqu’une tâche est reprise, Snowflake vérifie que le rôle avec le privilège OWNERSHIP sur la tâche 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.

    Seuls les administrateurs de compte (utilisateurs dotés du rôle ACCOUNTADMIN) peuvent accorder le privilège EXECUTE TASK à un rôle. Pour faciliter l’utilisation, nous vous recommandons de créer un rôle personnalisé (par exemple, TASKADMIN) et d’attribuer le privilège EXECUTE TASK à ce rôle. Tout rôle pouvant octroyer des privilèges (par exemple, SECURITYADMIN ou n’importe quel rôle disposant du privilège MANAGE GRANTS) peut ensuite attribuer ce rôle personnalisé à tout rôle de propriétaire de tâche afin de permettre la modification de ses propres tâches. Pour obtenir des instructions sur la création de rôles personnalisés et de hiérarchies de rôles, voir Configuration du contrôle d’accès.

  • Seul le propriétaire de la tâche (c’est-à-dire le rôle doté du privilège OWNERSHIP sur la tâche) peut définir ou annuler la définition des propriétés sur une tâche.

  • Une tâche autonome doit être suspendue avant de pouvoir être modifiée.

  • La tâche racine dans une arborescence de tâches doit être suspendue avant que toute tâche dans l’arborescence soit modifiée, une tâche enfant suspendue ou reprise, ou une tâche enfant ajoutée (à l’aide de ALTER TASK … AFTER).

  • Une arborescence simple de tâches est limitée à un maximum de 1 000 tâches au total (y compris la tâche racine) dans un état repris ou suspendu.

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

  • Par défaut, une instruction DML exécutée sans démarrer explicitement une transaction est automatiquement validée en cas de succès ou annulée en cas d’échec à la fin de l’instruction. Ce comportement s’appelle validation automatique, et il est contrôlé avec le paramètre AUTOCOMMIT. Ce paramètre doit être défini sur TRUE. Si le paramètre AUTOCOMMIT est défini sur FALSE au niveau du compte, définissez-le sur TRUE pour la tâche individuelle (avec ALTER TASK … SET AUTOCOMMIT = TRUE).

  • Lorsqu’une tâche est suspendue, son exécution actuelle (c’est-à-dire une exécution avec un état EXECUTING dans la sortie TASK_HISTORY) est terminée. Pour interrompre l’exécution de la tâche spécifiée, exécutez la fonction SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS.

Exemples

L’exemple suivant lance l’opération d’une tâche :

ALTER TASK mytask RESUME;

L’exemple suivant définit les paramètres de session TIMEZONE et CLIENT_TIMESTAMP_TYPE_MAPPING pour la session dans laquelle la tâche est exécutée :

ALTER TASK mytask SET TIMEZONE = 'America/Los_Angeles', CLIENT_TIMESTAMP_TYPE_MAPPING = TIMESTAMP_LTZ;

L’exemple suivant définit une planification différente pour une tâche :

ALTER TASK mytask SET SCHEDULE = 'USING CRON */3 * * * * UTC';

L’exemple suivant supprime le prédécesseur actuel pour la tâche enfant mytask (pred_task1) et le remplace par un prédécesseur différent (pred_task2) :

ALTER TASK mytask REMOVE AFTER pred_task1;

ALTER TASK mytask ADD AFTER pred_task2;

L’exemple suivant modifie l’instruction SQL associée à une tâche. La tâche interroge désormais la fonction CURRENT_VERSION lorsqu’elle s’exécute :

ALTER TASK mytask MODIFY AS SELECT CURRENT_VERSION();

L’exemple suivant modifie la condition WHEN associée à une tâche. Lorsqu’elle est déclenchée (selon une planification ou après l’exécution réussie de la tâche parent), la tâche s’exécute désormais uniquement lorsque le flux mystream contient des données :

ALTER TASK mytask MODIFY WHEN SYSTEM$STREAM_HAS_DATA('MYSTREAM');