Introduction aux tâches¶
Les tâches utilisent des fonctions définies par l’utilisateur pour automatiser et planifier les processus d’entreprise. Une seule tâche vous permet d’exécuter une fonction simple ou complexe dans votre pipeline de données. Avec les graphiques de tâches, vous pouvez assembler plusieurs tâches pour créer des pipelines de données afin de traiter des cas d’utilisation complexes. Vous pouvez également combiner des tâches avec des flux de tables pour des workflows continus ELT afin de traiter les données récemment modifiées.
Une tâche peut exécuter l’un des types de fonction suivants :
Instruction SQL unique
Appel d’une procédure stockée
Logique procédurale à l’aide de l’Exécution de scripts Snowflake
Vous pouvez également utiliser des tâches déclenchées avec des flux de tables pour des workflows continus ELT afin de traiter les lignes de table récemment modifiées.
Les tâches peuvent également être utilisées indépendamment pour générer des rapports périodiques en insérant ou en fusionnant des lignes dans un tableau de rapports ou en effectuant d’autres travaux périodiques. Pour exécuter des processus d’entreprise complexes avec des tâches, envisagez d’utiliser les graphiques des tâches pour chaîner plusieurs tâches.
Note
Évolution du schéma de table n’est pas prise en charge par les tâches.
Dans ce chapitre :
Workflow pour la création de tâches¶
Cette section donne un aperçu du workflow de configuration de tâches.
Créez un rôle d’administrateur de tâches qui peut exécuter les commandes des étapes suivantes.
Créez une tâche en utilisant CREATE TASK. La tâche est suspendue par défaut. Consultez les sections suivantes pour plus d’informations sur la création de tâches :
Testez vos tâches à l’aide de l”exécution manuelle des tâches.
Exécutez ALTER TASK … RESUME pour permettre à la tâche de s’exécuter en fonction des paramètres spécifiés dans la définition de la tâche. Consultez les sections suivantes pour plus d’informations sur les exécutions de tâches :
Ressources de calcul¶
Les tâches nécessitent des ressources de calcul pour exécuter le code SQL. L’un ou l’autre des modèles de calcul suivants peut être choisi pour des tâches en particulier :
Modèle de calcul sans serveur
Entrepôt virtuel géré par l’utilisateur
Tâches sans serveur¶
Les tâches sans serveur vous permettent de vous appuyer sur des ressources de calcul gérées par Snowflake plutôt que sur des entrepôts virtuels gérés par des utilisateurs. Snowflake redimensionne automatiquement les ressources de calcul sans serveur en fonction des besoins de chaque charge de travail. Snowflake détermine la taille idéale des ressources de calcul sans serveur pour une exécution donnée en se basant sur une analyse dynamique des statistiques des exécutions les plus récentes de la même tâche. La taille de calcul maximale d’une tâche sans serveur est équivalente à un entrepôt virtuel XXLARGE géré par l’utilisateur. Plusieurs charges de travail dans votre compte partagent un ensemble commun de ressources de calcul.
Pour utiliser le modèle de calcul sans serveur, omettez le paramètre WAREHOUSE lorsque vous créez une tâche à l’aide de CREATE TASK. Notez que le rôle qui exécute la commande CREATE TASK doit avoir le privilège global EXECUTE MANAGED TASK. Pour plus d’informations sur les exigences de contrôle d’accès aux tâches, voir Sécurité des tâches.
La facturation des exécutions de tâches sans serveur diffère du modèle de consommation de crédits standard pour les tâches qui s’appuient sur des entrepôts virtuels pour les ressources de calcul. Pour plus d’informations, voir Coûts des tâches.
Tâches gérées par l’utilisateur¶
Vous pouvez également gérer les ressources de calcul pour des tâches individuelles en spécifiant un entrepôt virtuel existant lorsque vous créez la tâche. Cette option exige que vous choisissiez un entrepôt dont la taille est adaptée aux actions SQL exécutées par la tâche.
Sélection d’une taille d’entrepôt¶
Si vous choisissez d’utiliser les entrepôts existants pour fournir les ressources de calcul pour des tâches en particulier, suivez les meilleures pratiques décrites dans Considérations relatives aux entrepôts. Pour comprendre les besoins en calcul de votre tâche, analysez le temps d’exécution moyen d’une tâche unique ou du graphique de tâches en utilisant différents entrepôts en fonction de la taille de l’entrepôt et du clustering. Vous devez également vous demander si l’entrepôt est partagé par plusieurs processus.
Pour analyser la durée d’exécution moyenne de vos tâches, interrogez la vue TASK_HISTORY Account Usage. La différence moyenne entre les heures planifiées et effectuées pour une tâche est la durée d’exécution moyenne attendue de la tâche. Cette différence inclut le temps pendant lequel la tâche a été mise en file d’attente alors que d’autres processus utilisent les ressources de calcul de l’entrepôt.
Pour des graphiques de tâches, il y a un bref décalage après l’exécution d’une tâche prédécesseur et l’exécution de toute tâche enfant. Choisissez un entrepôt dont la taille est suffisamment grande pour permettre l’exécution simultanée de plusieurs tâches enfants.
Le diagramme suivant montre une période de 1 minute au cours de laquelle une seule tâche a été mise en file d’attente pendant 20 secondes, puis exécutée pendant 40 secondes. Cela signifie que d’autres processus ont utilisé les ressources de l’entrepôt pendant les 20 premières secondes suivant la planification de la tâche.

Le diagramme suivant montre un graphique de tâches qui nécessite en moyenne 5 minutes pour chaque exécution. Le diagramme montre la fenêtre temporelle pour 2 exécutions du graphique de tâches. Cette fenêtre est calculée à partir du moment où la tâche racine doit démarrer jusqu’à ce que la dernière tâche enfant soit terminée.
Dans cet exemple, l’entrepôt sur lequel s’exécute le graphique de tâches est partagé avec d’autres opérations simultanées. Ces opérations simultanées consomment toutes les ressources disponibles lorsque chaque tâche du graphique de tâches termine son exécution et avant le démarrage de la tâche suivante. Par conséquent, la période de chaque tâche inclut une certaine quantité de files d’attente pendant qu’elle attend que d’autres opérations se terminent et libèrent des ressources de calcul.

Recommandations pour la sélection d’un modèle de calcul¶
Le tableau suivant décrit divers facteurs qui peuvent vous aider à décider quand utiliser des tâches sans serveur plutôt que des tâches gérées par l’utilisateur :
Catégorie |
Tâches sans serveur |
Tâches gérées par des utilisateurs |
Remarques |
---|---|---|---|
Nombre, durée et prévisibilité des charges de travail des tâches concurrentes |
Recommandé pour les entrepôts sous-utilisés où trop peu de tâches sont exécutées simultanément ou se terminent rapidement. Les tâches dont les exécutions sont relativement stables sont de bons candidats pour les tâches sans serveur. |
Recommandé pour les entrepôts utilisés à pleine capacité avec plusieurs tâches simultanées. Également recommandé pour les charges imprévisibles sur les ressources de calcul. Des entrepôts multi-clusters avec suspension et reprise automatiques activées pourraient aider à modérer votre consommation de crédit. |
Pour les tâches sans serveur, Snowflake facture votre compte en fonction de l’utilisation réelle des ressources de calcul. En revanche, la facturation des entrepôts gérés par les utilisateurs est basée sur la taille de l’entrepôt, avec un minimum de 60 secondes à chaque reprise de l’entrepôt. |
Intervalle d’horaire |
Recommandé lorsque le respect de l’intervalle d’horaire est très important. Si une exécution d’une tâche autonome ou d’un graphique de tâches planifiées dépasse l’intervalle, Snowflake augmente la taille des ressources de calcul. |
Recommandé lorsque le respect de l’intervalle d’horaire est moins important. |
L”intervalle de planification fait référence à l’intervalle de temps entre les exécutions planifiées d’une tâche autonome ou de la tâche racine d’un graphique de tâches. L’augmentation des ressources de calcul peut réduire le temps d’exécution de certains codes SQL, mais pas de tous, mais ne garantit pas que l’exécution d’une tâche soit terminée dans le délai de traitement par lots. |
La taille maximale d’une exécution de tâche sans serveur est équivalente à un entrepôt XXLARGE. Si la charge de travail d’une tâche nécessite un entrepôt plus grand, créez une tâche gérée par l’utilisateur avec un entrepôt de la taille requise.
Tâches en cours d’exécution¶
Cette section décrit les différentes manières dont une tâche peut être planifiée et exécutée, la manière dont les échecs des tâches sont gérés et la manière dont la version d’une tâche est déterminée.
Planification des tâches¶
Les tâches sont généralement exécutées selon une planification. Vous pouvez définir la planification lors de la création d’une tâche en utilisant CREATE TASK ou plus tard en utilisant ALTER TASK.
Une tâche autonome ou la tâche racine d’un graphique de tâches s’exécute généralement selon une planification. Vous pouvez définir la planification lors de la création d’une tâche en utilisant CREATE TASK ou plus tard en utilisant ALTER TASK.
Snowflake garantit qu’une seule instance d’une tâche avec une planification est exécutée à un moment. Si une tâche est toujours en cours d’exécution lors de la prochaine heure d’exécution planifiée, cette heure planifiée est ignorée.
Snowflake redimensionne et met automatiquement à l’échelle les ressources de calcul pour les tâches sans serveur. Pour les tâches gérées par l’utilisateur, choisissez une taille d’entrepôt appropriée pour que la tâche accomplisse sa charge de travail selon la planification. Pour plus d’informations, voir Choisir une taille d’entrepôt.
Planification des tâches et heure d’été¶
L’expression cron dans une définition de tâche prend en charge la spécification d’un fuseau horaire. Les tâches planifiées où la transition de l’heure standard à l’heure d’été (ou l’inverse) se produit peuvent avoir des comportements inattendus.
Par exemple :
De l’heure d’été à l’heure d’hiver, une tâche dont le démarrage est planifié à 1 AM dans le fuseau horaire Amérique/Los Angeles (
0 1 * * * America/Los_Angeles
) est exécutée deux fois. À 1 AM puis à nouveau lorsque 1:59:59 AM passe à 1:00:00 AM heure locale.Lorsqu’on passe de l’heure d’hiver à l’heure d’été, une tâche planifiée pour commencer à 2 AM dans le fuseau horaire Amérique/Los Angeles (
0 2 * * * America/Los_Angeles
) ne s’exécute pas, car l’heure locale passe de 1:59:59 AM à 3:00:00 AM.
Pour éviter les exécutions de tâches inattendues dues à l’heure d’été, prenez en compte ce qui suit :
Ne planifiez pas l’exécution des tâches entre 1 AM et 3 AM.
Ajustez manuellement l’expression cron pour les tâches planifiées entre le 1 AM et le 3 AM deux fois par an pour compenser le changement d’heure.
Utilisez un format d’heure qui n’applique pas l’heure d’été, comme UTC.
Tâches déclenchées¶
Vous pouvez utiliser les tâches déclenchées pour qu’elles ne s’exécutent que lorsqu’un flux défini contient de nouvelles données. Cela simplifie un cas d’usage courant consistant à interroger fréquemment une source dont la disponibilité de nouvelles données est imprévisible, tout en réduisant la latence grâce à un traitement immédiat dès qu’il y a de nouvelles données.
Les tâches déclenchées n’utilisent pas de ressources de calcul tant que le flux défini n’a pas de données et ne déclenche pas l’exécution de la tâche.
Les conditions d’exécution des tâches déclenchées sont les suivantes :
Lorsque des données sont modifiées dans la table que le flux associé suit.
Lors de la première reprise de la tâche, pour consommer les données déjà présentes dans le flux.
Les tâches déclenchées exécutent automatiquement un contrôle de santé toutes les 12 heures pour éviter que le flux ne devienne obsolète. S’il n’y a pas de données dans le flux, Snowflake ignore l’exécution sans utiliser de ressources de calcul.
Création de tâches déclenchées¶
Pour créer une nouvelle tâche déclenchée, omettez le paramètre SCHEDULE
et incluez le flux cible dans la clause WHEN
.
CREATE TASK triggeredTask WAREHOUSE = my_warehouse
WHEN system$stream_has_data('my_stream')
AS
INSERT INTO my_downstream_table
SELECT * FROM my_stream;
ALTER TASK triggeredTask RESUME;
Pour migrer une tâche existante d’une tâche planifiée vers une tâche déclenchée, désactivez le paramètre SCHEDULE
. La tâche existante doit avoir un flux cible défini dans la clause WHEN
.
ALTER TASK task SUSPEND;
ALTER TASK task UNSET SCHEDULE;
ALTER TASK task RESUME;
Vous trouverez ci-dessous les détails et les limites des paramètres des tâches déclenchées :
Par défaut, les tâches déclenchées s’exécutent au maximum toutes les 30 secondes. Vous pouvez modifier le paramètre
USER_TASK_MINIMUM_TRIGGER_INTERVAL_IN_SECONDS
pour qu’il s’exécute plus fréquemment, jusqu’à toutes les 15 secondes.Les conditions de la tâche déclenchée
WHEN
doivent être basées sur la modification des données.La logique conditionnelle when permet d’utiliser les logiques conditionnelles
AND
etOR
. La logique conditionnelleAND
peut entraîner l’omission d’une tâche si un seul des flux définis contient des données.
Considérations sur les tâches déclenchées¶
Vous trouverez ci-dessous des informations détaillées sur la gestion, la configuration et la surveillance des tâches déclenchées :
Dans les sorties
SHOW TASKS
etDESC TASK
, la propriétéSCHEDULE
afficheNULL
pour les tâches déclenchées.Dans la sortie de la vue task_history des schemas information_schema et account_usage, la colonne SCHEDULED_FROM affiche TRIGGER.
Si le flux ou la table que le flux suit est supprimé ou recréé, la tâche déclenchée est automatiquement suspendue. Une fois la table ou le flux recréé, l’utilisateur peut exécuter
ALTER TASK <nom_de_la_tâche> RESUME
pour reprendre le traitement déclenché.
Limitations des tâches déclenchées¶
Les limitations des tâches déclenchées sont les suivantes :
Les flux sur les partages de données, les tables de répertoire, les tables externes et les tables hybrides ne sont pas pris en charge.
Les tâches sans serveur ne sont pas prises en charge.
Exécution manuelle des tâches¶
La commande EXECUTE TASK déclenche manuellement une exécution unique d’une tâche. Cette commande SQL est utile pour tester des tâches nouvelles ou modifiées avant de leur permettre d’exécuter du code SQL en production.
Vous pouvez appeler cette commande SQL directement dans les scripts ou dans les procédures stockées. En outre, cette commande prend en charge l’intégration de tâches dans des pipelines de données externes. Tous les services tiers qui peuvent s’authentifier dans votre compte Snowflake et autoriser des actions SQL peuvent exécuter la commande EXECUTE TASK pour exécuter des tâches.
Gestion des versions des exécutions de tâches¶
Lorsqu’une tâche autonome est reprise pour la première fois ou exécutée manuellement, une version initiale de la tâche est définie. La tâche autonome s’exécute en utilisant cette version. Après la suspension et la modification d’une tâche, une nouvelle version est définie lorsque la tâche autonome est reprise ou exécutée manuellement.
Lorsque la tâche est suspendue, toutes les futures exécutions planifiées de la tâche sont annulées ; cependant, les tâches en cours d’exécution continuent de s’exécuter en utilisant la version actuelle.
Par exemple, supposons que la tâche soit suspendue, mais qu’une exécution planifiée de cette tâche ait déjà commencé. Le propriétaire de la tâche modifie le code SQL appelé par la tâche alors que celle-ci est toujours en cours d’exécution. La tâche s’exécute et exécute le code SQL dans sa définition en utilisant la version de la tâche qui existait lorsque la tâche a commencé son exécution. Lorsque la tâche est reprise ou est exécutée manuellement, une nouvelle version de la tâche est définie. Cette nouvelle version inclut les modifications apportées à la tâche.
Pour récupérer l’historique des versions de tâches, interrogez la vue TASK_VERSIONS Account Usage (dans la base de données partagée SNOWFLAKE).
Suspension automatique de tâches après des échecs d’exécution¶
Il est possible de suspendre automatiquement des tâches après un nombre spécifié d’exécutions consécutives qui échouent ou dont le délai est dépassé. Cette fonction peut réduire les coûts en suspendant les tâches qui consomment des crédits Snowflake, mais ne s’exécutent pas jusqu’à leur terme.
Définir le paramètre SUSPEND_TASK_AFTER_NUM_FAILURES = num
sur une tâche Lorsque le paramètre est défini sur une valeur supérieure à 0
, les tâches sont automatiquement suspendues après que le nombre spécifié d’exécutions consécutives de la tâche ait échoué ou ait expiré.
Ce paramètre peut être défini lors de la création d’une tâche à l’aide de CREATE TASK ou après à l’aide de ALTER TASK. Vous pouvez également modifier cette valeur dans Snowsight.
Le paramètre SUSPEND_TASK_AFTER_NUM_FAILURES peut également être défini au niveau du compte, de la base de données ou du schéma. Le paramètre s’applique à toutes les tâches contenues dans l’objet modifié. Notez que la définition explicite du paramètre à un niveau inférieur remplace la valeur de paramètre définie à un niveau supérieur.
Réessayer automatiquement les tâches qui ont échoué¶
Si des graphiques de tâches se terminent dans un statut FAILED, Snowflake peut automatiquement réessayer les graphiques de tâches. La répétition automatique de tâches est désactivée par défaut. Pour activer cette fonction, définissez TASK_AUTO_RETRY_ATTEMPTS sur une valeur supérieure à 0.
Les tâches qui utilisent les notifications d’erreur envoient des notifications pour chaque nouvelle tentative échouée. Pour plus d’informations, voir Configuration d’une tâche pour envoyer des notifications d’erreur.
Lorsque vous définissez la valeur du paramètre TASK_AUTO_RETRY_ATTEMPTS au niveau du compte, de la base de données ou du schéma, le changement est appliqué aux tâches contenues dans l’objet modifié lors de leur exécution planifiée suivante.
Définition des paramètres de session des tâches¶
Vous pouvez définir les paramètres de session pour la session dans laquelle une tâche est exécutée. Pour ce faire, modifiez une tâche existante et définissez les valeurs de paramètres souhaitées à l’aide de ALTER TASK … SET session_parameter = value[, session_parameter = value ... ]
ou modifiez la tâche dans Snowsight.
Une tâche prend en charge tous les paramètres de session. Pour obtenir la liste complète, voir Paramètres. Les tâches ne prennent pas en charge les paramètres de compte ou d’utilisateur.
Affichage de l’historique des tâches de votre compte¶
Vous pouvez voir l’historique des tâches de votre compte en utilisant SQL ou Snowsight. Pour voir l’historique des tâches dans Snowsight, référez-vous à Affichage des tâches et des graphiques de tâches dans Snowsight. Pour obtenir des informations sur les privilèges requis, consultez Affichage de l’historique des tâches.
Pour visualiser l’historique d’exécution d’une seule tâche :
- SQL:
Interrogez la fonction de table TASK_HISTORY (dans Schéma d’information de Snowflake).
Pour afficher les détails de l’exécution d’un graphique de tâches qui est actuellement programmée ou en cours :
- SQL:
Interrogez la fonction de table CURRENT_TASK_GRAPHS (dans Schéma d’information de Snowflake).
Pour afficher l’historique des exécutions de graphiques de tâches qui se sont correctement effectuées, qui ont échoué ou qui ont été annulées au cours des 60 dernières minutes :
- SQL:
Interrogez la fonction de table COMPLETE_TASK_GRAPHS (dans Schéma d’information de Snowflake).
Interrogez la vue Vue COMPLETE_TASK_GRAPHS (dans Account Usage).
Coûts des tâches¶
Les coûts associés à l’exécution d’une tâche pour exécuter le code SQL diffèrent selon la source des ressources de calcul pour la tâche :
- Entrepôt géré par les utilisateurs
Snowflake facture votre compte pour l’utilisation du crédit en fonction de l’utilisation de l’entrepôt pendant l’exécution d’une tâche, de la même manière que l’utilisation de l’entrepôt pour l’exécution des mêmes instructions SQL dans un client ou dans l’interface Web de Snowflake. La facturation à la seconde et la suspension automatique du crédit vous permettent de commencer avec des tailles d’entrepôts plus grandes, puis d’ajuster la taille en fonction de vos charges de travail.
- Modèle de calcul sans serveur
Snowflake facture votre compte sur la base de l’utilisation des ressources de calcul. Les frais sont calculés sur la base de votre utilisation totale des ressources, y compris l’utilisation du service Cloud, mesurée en heures de calcul d’utilisation du crédit. Le coût en heures de calcul varie en fonction de la taille de l’entrepôt et de la durée d’exécution de la requête. Pour plus d’informations, voir Utilisation du crédit sans serveur ou Requête : coût total de la tâche.
Snowflake analyse les exécutions de tâches dans l’historique des tâches pour déterminer dynamiquement la taille et le nombre corrects des ressources de calcul sans serveur. Au fur et à mesure que Snowflake augmente et diminue automatiquement les ressources pour gérer vos exécutions de tâches, le coût d’exécution des tâches augmente proportionnellement.
Pour savoir combien de crédits sont consommés par des tâches, reportez-vous au « Tableau des crédits de fonctionnalité sans serveur » dans la Table de consommation du service Snowflake.
Tenez compte des meilleures pratiques suivantes pour optimiser les coûts lorsque vous créez des tâches :
Définissez la SCHEDULE pour qu’elle s’exécute moins souvent.
Utilisez les paramètres de suspension et de relance automatiques pour éviter de gaspiller des ressources sur des tâches qui échouent.
Créez un budget et envoyez des alertes sur les limites de dépenses pour les fonctions sans serveur. Pour plus d’informations, voir Surveillance de l’utilisation du crédit à l’aide de Budgets.
Pour récupérer l’utilisation actuelle du crédit pour une tâche spécifique, interrogez la fonction de la table SERVERLESS_TASK_HISTORY. Exécutez l’instruction suivante en tant que propriétaire de la tâche, où
<nom_base_de_données>
est la base de données qui contient la tâche et<nom_tâche>
est le nom de la tâche :SET num_credits = (SELECT SUM(credits_used) FROM TABLE(<database_name>.information_schema.serverless_task_history( date_range_start=>dateadd(D, -1, current_timestamp()), date_range_end=>dateadd(D, 1, current_timestamp()), task_name => '<task_name>') ) );
Pour récupérer l’utilisation actuelle du crédit pour toutes les tâches sans serveur, interrogez la vue SERVERLESS_TASK_HISTORY. Exécutez l’instruction suivante en tant qu’administrateur de compte :
SELECT start_time, end_time, task_id, task_name, credits_used, schema_id, schema_name, database_id, database_name FROM snowflake.account_usage.serverless_task_history ORDER BY start_time, task_id;
Sécurité des tâches¶
Pour commencer à effectuer des tâches, vous devez disposer des privilèges d’accès adéquats. Cette section décrit comment gérer l’accès aux tâches.
Pour plus d’informations sur la propriété des graphiques de tâches, consultez Gérer la propriété du graphique de tâches.
Privilèges de contrôle d’accès¶
Création de tâches¶
La création de tâches nécessite un rôle avec au minimum les privilèges suivants :
Objet |
Privilège |
Remarques |
---|---|---|
Compte |
EXECUTE MANAGED TASK |
Obligatoire uniquement pour les tâches qui dépendent de ressources de calcul sans serveur. |
Base de données |
USAGE |
|
Schéma |
USAGE, CREATE TASK |
|
Entrepôt |
USAGE |
Requis uniquement pour les tâches qui dépendent des entrepôts gérés par l’utilisateur. |
Tâches en cours d’exécution¶
Après la création d’une tâche, le propriétaire de la tâche doit disposer des privilèges suivants pour que la tâche puisse être exécutée :
Objet |
Privilège |
Remarques |
---|---|---|
Compte |
EXECUTE TASK |
Requis pour exécuter toutes les tâches du rôle. La révocation du privilège EXECUTE TASK sur un rôle empêche toutes les tâches suivantes de démarrer sous ce rôle. |
Compte |
EXECUTE MANAGED TASK |
Obligatoire uniquement pour les tâches qui dépendent de ressources de calcul sans serveur. |
Base de données |
USAGE |
|
Schéma |
USAGE |
|
Tâche |
USAGE |
|
Entrepôt |
USAGE |
Requis uniquement pour les tâches qui dépendent des entrepôts gérés par l’utilisateur. |
En outre, le rôle doit disposer des autorisations requises pour exécuter l’instruction SQL exécutée par la tâche.
Affichage de l’historique des tâches¶
Pour voir les tâches, vous devez disposer d’un ou de plusieurs des privilèges suivants :
Le rôle ACCOUNTADMIN
Le privilège OWNERSHIP sur la tâche
Le privilège MONITOR EXECUTION global
Reprise ou suspension de tâches¶
En plus du propriétaire de la tâche, un rôle qui a le privilège OPERATE sur la tâche peut suspendre ou reprendre la tâche. Ce rôle doit avoir le privilège USAGE sur la base de données et le schéma qui contiennent la tâche. Aucun autre privilège n’est requis.
Lorsqu’une tâche est reprise, Snowflake vérifie que le rôle de propriétaire de la tâche a les privilèges énumérés dans Tâches en cours d’exécution
Créer des rôles personnalisés pour gérer les autorisations de tâches¶
Avec les rôles personnalisés, vous pouvez facilement gérer les autorisations accordées à chaque compte ou rôle dans Snowflake. Pour modifier les autorisations de tous les comptes ou rôles utilisant le rôle personnalisé, mettez ce dernier à jour. Vous pouvez également révoquer les autorisations en supprimant le rôle personnalisé.
Créer un rôle personnalisé pour créer des tâches¶
Snowflake nécessite des autorisations différentes pour créer des tâches sans serveur et des tâches gérées par l’utilisateur.
Par exemple, pour créer des tâches gérées par l’utilisateur, créez un rôle personnalisé nommé warehouse_task_creation
et accordez à ce rôle les privilèges CREATE TASK et USAGE sur l’entrepôt dans lequel le rôle peut créer des tâches.
USE SYSADMIN;
CREATE ROLE warehouse_task_creation
COMMENT = 'This role can create user-managed tasks.';
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE warehouse_task_creation;
GRANT USAGE
ON WAREHOUSE warehouse1
TO ROLE warehouse_task_creation;
Comme exemple de rôle pouvant créer des tâches sans serveur ; créez un rôle personnalisé nommé serverless_task_creation
et accordez au rôle le privilège CREATE TASK et le privilège EXECUTE MANAGED TASK de niveau compte.
USE SYSADMIN;
CREATE ROLE serverless_task_creation
COMMENT = 'This role can create serverless tasks.';
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE serverless_task_creation;
GRANT EXECUTE MANAGED TASK ON ACCOUNT
TO ROLE serverless_task_creation;
Créer un rôle personnalisé pour administrer les tâches¶
Créer un rôle personnalisé disposant du privilège EXECUTE TASK et 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 supprimer la possibilité pour le rôle de propriétaire de la tâche d’exécuter la tâche, révoquez ce rôle personnalisé à partir du rôle de propriétaire de la tâche.
Par exemple, créez un nom de rôle personnalisé taskadmin
et accordez-lui le privilège EXECUTE TASK. Attribuez le rôle taskadmin
à un rôle de propriétaire de tâche nommé myrole
:
USE ROLE securityadmin;
CREATE ROLE taskadmin;
Définissez le rôle actif sur ACCOUNTADMIN avant d’accorder les privilèges au niveau du compte au nouveau rôle
USE ROLE accountadmin;
GRANT EXECUTE TASK, EXECUTE MANAGED TASK ON ACCOUNT TO ROLE taskadmin;
Définissez le rôle actif sur SECURITYADMIN pour montrer que ce rôle peut accorder un rôle à un autre rôle
USE ROLE securityadmin;
GRANT ROLE taskadmin TO ROLE myrole;
Pour plus d’informations sur la création de rôles personnalisés et de hiérarchies de rôles, voir Configuration du contrôle d’accès.
Supprimer un rôle de propriétaire de tâche¶
Lorsque vous supprimez le rôle de propriétaire d’une tâche, la tâche transfère la propriété au rôle qui a supprimé le rôle de propriétaire. Lorsqu’une tâche transfère sa propriété, elle est automatiquement mise en pause et les nouvelles exécutions ne sont pas planifiées tant que le nouveau propriétaire n’a pas repris la tâche.
Si vous supprimez le rôle alors que la tâche est en cours d’exécution, le traitement de la tâche s’achève sous le rôle supprimé.
Exécution des tâches de service système¶
Snowflake exécute des tâches avec les privilèges du propriétaire, mais les tâches exécutées ne sont pas associées à un utilisateur. Au lieu de cela, chaque exécution est effectuée par un service système. Les tâches sont découplées d’utilisateurs spécifiques pour éviter les complications pouvant survenir lorsque des utilisateurs sont détruits, verrouillés en raison de problèmes d’authentification, ou lorsque des rôles sont supprimés.
Étant donné que les tâches exécutées sont découplées d’un utilisateur, l’historique des requêtes associées à ces tâches est associé au service système. En tant que tel, il n’existe aucun identifiants de connexion utilisateur pour ce service et aucune personne ne peut assumer son identité. L’activité pour le service système est limitée à votre compte. Les mêmes protections de chiffrement et autres protocoles de sécurité sont intégrés à ce service comme c’est le cas pour d’autres opérations.
Tâche DDL¶
Pour faciliter la création et la gestion des tâches, Snowflake fournit l’ensemble suivant de commandes spéciales DDL :
De plus, les fournisseurs peuvent afficher, accorder ou révoquer l’accès aux objets de base de données nécessaires pour ELT en utilisant le DDL de contrôle d’accès standard suivant :
Fonctions des tâches¶
Pour prendre en charge la récupération d’informations sur les tâches, Snowflake fournit l’ensemble de fonctions SQL suivant :