Introduction aux tâches

Utilisez les tâches pour automatiser, planifier et optimiser les procédures commerciales sur votre pipeline de données.

Dans Snowflake, les tâches peuvent exécuter l’un des types de fonctions suivants :

  • Une seule instruction SQL.

  • Un appel à une procédure stockée.

  • Logique procédurale à l’aide de Snowflake Scripting.

Pour les procédures complexes, comme la génération de rapports ou la maintenance des tables périodiques, combinez les tâches en créant des graphiques de tâches. Pour traiter en continu des données nouvelles ou modifiées à mesure de leur arrivée, comme dans les flux de travail Extraire, Charger, Transformer (ELT), utilisez les tâches déclenchées pour combiner des tâches avec des flux de table.

Note

Évolution du schéma de table n’est pas prise en charge par les tâches.

Dans ce chapitre :

Aperçu du flux de travail pour la création de tâches

  1. Créez un rôle d’administrateur de tâches qui peut exécuter les commandes des étapes suivantes.

  2. Définissez une nouvelle tâche à l’aide de CREATE TASK. La tâche est suspendue par défaut. Pour plus d’informations sur l’ensemble des paramètres de la tâche, voir :

  3. Testez manuellement les tâches à l’aide de EXECUTE TASK.

  4. Modifiez la tâche ou laissez-la s’exécuter en continu en utilisant ALTER TASK. .. RESUME. Pour plus d’informations sur l’exécution des tâches, voir :

Ressources de calcul

Les tâches requièrent des ressources de calcul pour l’exécution des fonctions SQL, Python, Java et Scala, ainsi que des procédures stockées. Pour chaque tâche, vous pouvez choisir d’autoriser Snowflake à gérer les ressources en créant des tâches sans serveur, ou de les gérer vous-même à l’aide du modèle d’entrepôt virtuel géré par l’utilisateur.

Tâches sans serveur

Avec ce modèle, les tâches s’exécutent sur des ordinateurs gérés par Snowflake. Snowflake redimensionne automatiquement les ressources en fonction des exigences de chaque charge de travail.

Les tâches qui s’exécutent régulièrement sont de bons candidats pour le modèle de calcul sans serveur. Ce modèle est également recommandé lorsque vous disposez d’entrepôts sous-utilisés sur lesquels peu de tâches sont en cours d’exécution.

Snowflake détermine la taille idéale des ressources de calcul pour une exécution donnée sur la base d’une analyse dynamique des statistiques des exécutions les plus récentes de la même tâche.

Limitations

Créer une tâche à l’aide du modèle de calcul sans serveur

Lorsque vous utilisez CREATE TASK ou ALTER TASK, ne tenez pas compte du paramètre WAREHOUSE.

Le rôle qui exécute la tâche 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.

Vous pouvez prendre un certain contrôle sur le coût et les performances des tâches sans serveur en réglant les paramètres suivants :

  • SERVERLESS_TASK_MAX_STATEMENT_SIZE : la taille maximale de l’entrepôt pour éviter les coûts imprévus.

  • SERVERLESS_TASK_MIN_STATEMENT_SIZE : la taille minimale de l’entrepôt pour des performances prévisibles.

  • TARGET_COMPLETION_INTERVAL : le temps d’achèvement de la tâche souhaité.

Lorsque ces paramètres sont spécifiés, la priorité est la suivante :

  • SERVERLESS_TASK_MAX_STATEMENT_SIZE

  • SERVERLESS_TASK_MIN_STATEMENT_SIZE

  • TARGET_COMPLETION_INTERVAL

Comment Snowflake estime les ressources de calcul sans serveur

Snowflake estime automatiquement les ressources de calcul nécessaires à la réalisation d’une tâche en fonction du cadre temporel cible et des performances des tâches précédentes.

Le cadre de la cible peut être défini avec TARGET_COMPLETION_INTERVAL. Si cette valeur n’est pas définie, Snowflake redimensionne les ressources de calcul sans serveur pour terminer avant la prochaine heure d’exécution planifiée.

Une fois la tâche terminée, Snowflake estime les ressources de calcul nécessaires comme suit :

  • Si les tâches s’achèvent trop rapidement (dans un cadre temporel inférieur d’un facteur au cadre cible), Snowflake réduit les ressources lors des exécutions suivantes d’une taille d’entrepôt.

  • Si les tâches s’achèvent trop lentement (dans un cadre temporel supérieur d’un facteur au cadre cible), Snowflake augmente les ressources lors des exécutions suivantes d’une taille d’entrepôt.

Exemples

Exemple 1 : Créer une tâche sans serveur à exécuter toutes les heures avec un intervalle d’achèvement cible de 120 minutes :

CREATE TASK SCHEDULED_T1 SCHEDULE='USING CRON 0 * * * * America/Los_Angeles'
TARGET_COMPLETION_INTERVAL='120 MINUTE' AS SELECT 1;
Copy

En définissant l’TARGET_COMPLETION_INTERVAL sur une durée relativement longue, vous indiquez qu’il est acceptable que l’exécution de la tâche se prolonge. Snowflake dimensionne automatiquement le calcul sans serveur de manière à ce que l’exécution de la tâche se termine dans l’TARGET_COMPLETION_INTERVAL spécifié.

Exemple 2 : Créer une tâche sans serveur à exécuter toutes les heures avec une cible d’achèvement de 10 minutes :

CREATE TASK SCHEDULED_T2 SCHEDULE='USING CRON 0 * * * * UTC'
TARGET_COMPLETION_INTERVAL='10 MINUTE'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
AS SELECT 1;
Copy

En définissant l’TARGET_COMPLETION_INTERVAL avec une durée relativement courte, cela indique une préférence pour une tâche à accomplir rapidement. Snowflake dimensionne automatiquement le calcul sans serveur de manière à ce que l’exécution de la tâche se termine dans l’TARGET_COMPLETION_INTERVAL spécifié jusqu’à ce que la SERVERLESS_TASK_MAX_STATEMENT_SIZE soit atteinte.

Exemple 3 : Créer une tâche sans serveur planifiée une fois par jour à un moment donné dans un intervalle d’achèvement cible et une plage de tailles d’entrepôt minimale et maximale :

CREATE TASK SCHEDULED_T3 SCHEDULE='USING CRON 0 0 * * * UTC'
TARGET_COMPLETION_INTERVAL='180 M'
SCHEDULING_MODE = 'FLEXIBLE'
SERVERLESS_TASK_MIN_STATEMENT_SIZE='MEDIUM' SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE' AS SELECT 1;
Copy

Avec cette configuration, la tâche sans serveur s’exécute une fois par jour à minuit sur au moins un entrepôt moyen avec un TARGET_COMPLETION_INTERVAL de 3 heures. Snowflake dimensionne automatiquement le calcul sans serveur de manière à ce que l’exécution de la tâche se termine dans l’TARGET_COMPLETION_INTERVAL spécifié jusqu’à ce que la SERVERLESS_TASK_MAX_STATEMENT_SIZE soit atteinte. En définissant SCHEDULING_MODE comme flexible, la tâche peut commencer à n’importe quel moment de la journée.

Exemple 4 : Créer une tâche sans serveur planifiée une fois par jour sans intervalle d’achèvement cible :

CREATE TASK SCHEDULED_T4 SCHEDULE='USING CRON 0 0 * * * UTC'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE' AS SELECT 1;
Copy

Avec cette configuration, la tâche sans serveur s’exécute une fois par jour à minuit. Si une série de durées d’exécution de tâches ne se termine pas avant la prochaine heure planifiée, Snowflake dimensionne automatiquement le calcul sans serveur de manière à ce que l’exécution des tâches se termine dans la SCHEDULE spécifiée jusqu’à ce que la SERVERLESS_TASK_MAX_STATEMENT_SIZE soit atteinte.

Pour plus d’informations sur les paramètres et la syntaxe, voir CREATE TASK et ALTER TASK.

Modèle d’entrepôt virtuel géré par l’utilisateur

Avec ce modèle, vous contrôlez totalement les ressources de calcul utilisées pour chaque charge de travail.

Ce modèle est recommandé lorsque vous souhaitez gérer manuellement des charges imprévisibles sur les ressources de calcul. Les entrepôts multiclusters avec suspension automatique et reprise automatique activées peuvent également vous aider à modérer votre consommation de crédit.

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.

Exemple de fenêtre temporelle de tâches par lots

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.

Exemple de fenêtre temporelle de graphique de tâches par lots

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.

Planifier une tâche

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. Lorsque vous combinez des tâches dans un graphique de tâches, définissez la planification à l’aide des commandes CREATE TASK et ALTER TASK dans la tâche racine.

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

Utilisez les tâches déclenchées pour exécuter automatiquement des tâches chaque fois qu’un flux défini contient de nouvelles données. Il n’est donc pas nécessaire d’interroger fréquemment une source lorsque la disponibilité de nouvelles données est imprévisible. Il réduit également le temps de latence car les données sont traitées immédiatement.

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 (ou les tables) 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 saute l’exécution sans utiliser de ressources de calcul.

Créer une tâche déclenchée

Utilisez CREATE TASK, et définissez le flux cible à l’aide de la clause WHEN. (Ne pas inclure le paramètre SCHEDULE.)

Affectez des ressources de calcul pour la tâche en choisissant l’une des options suivantes :

  • Pour gérer manuellement les ressources (tâche d’entrepôt gérée par l’utilisateur), ajoutez le paramètre WAREHOUSE.

  • Pour permettre à Snowflake de gérer les ressources (tâche sans serveur), ajoutez le paramètre TARGET_COMPLETION_INTERVAL. Snowflake estime les ressources nécessaires et s’adapte pour réaliser la tâche dans ce laps de temps.

Migrer une tâche existante d’une tâche planifiée vers une tâche déclenchée

Suspendez la tâche, désactivez le paramètre SCHEDULE et reprenez la tâche. 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;
Copy

Migrer une tâche déclenchée existante gérée par l’utilisateur vers une tâche déclenchée sans serveur

Suspendez la tâche. Supprimez le paramètre WAREHOUSE et ajoutez le paramètre TARGET_COMPLETION_INTERVAL. Reprenez la tâche.

Considérations sur les tâches déclenchées

  • Dans les sorties SHOW TASKS et DESC TASK , la propriété SCHEDULE affiche NULL 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.

  • Lorsque vous travaillez avec plusieurs flux de données, vous pouvez gérer le moment où les tâches démarrent en utilisant des paramètres conditionnels : WHEN AND et WHEN OR.

Limitations 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 10 secondes.

  • Les flux sur les tables du répertoire, les tables externes et les tables hybrides ne sont pas pris en charge.

Exemples de tâches déclenchées

Exemple 1 : Créer une tâche gérée par l’utilisateur qui s’exécute chaque fois que des données changent dans l’un ou l’autre des deux flux :

CREATE TASK my_task
  WHEN SYSTEM$STREAM_HAS_DATA('my_return_stream')
  OR   SYSTEM$STREAM_HAS_DATA('my_order_stream')
  WAREHOUSE = my_warehouse
  AS
    INSERT INTO customer_activity
    SELECT customer_id, return_total, return_date, return
    FROM my_return_stream
    UNION ALL
    SELECT customer_id, order_total, order_date, order
    FROM my_order_stream;
Copy

Exemple 2 : Créer une tâche à exécuter chaque fois que des changements de données sont détectés dans deux flux de données différents. Comme la tâche utilise un AND conditionnel, la tâche est ignorée si un seul des deux flux contient de nouvelles données.

Comme l’TARGET_COMPLETION_INTERVAL est de 120 minutes, Snowflake estime et ajuste les ressources de calcul nécessaires à l’accomplissement de la tâche dans ce laps de temps.

CREATE TASK triggeredTask
  WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
  TARGET_COMPLETION_INTERVAL='120 MINUTES'
  AS
    INSERT INTO completed_promotions
    SELECT order_id, order_total, order_time, promotion_id
    FROM orders_stream
    WHERE promotion_id IS NOT NULL;
Copy

Exécuter une tâche manuellement

Utilisez CREATE TASK ou ALTER TASK pour créer une nouvelle tâche et en définir les paramètres.

Utilisez EXECUTE TASK pour déclencher une seule exécution de la tâche. Cette commande SQL est utile pour tester des tâches nouvelles ou modifiées.

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 TASKSET 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 des tâches sans serveur.

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>')
    )
  );
Copy

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;
Copy

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.';
Copy
USE ACCOUNTADMIN;

GRANT CREATE TASK
  ON SCHEMA schema1
  TO ROLE warehouse_task_creation;
Copy
GRANT USAGE
  ON WAREHOUSE warehouse1
  TO ROLE warehouse_task_creation;
Copy

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.';
Copy
USE ACCOUNTADMIN;

GRANT CREATE TASK
  ON SCHEMA schema1
  TO ROLE serverless_task_creation;
Copy
GRANT EXECUTE MANAGED TASK ON ACCOUNT
  TO ROLE serverless_task_creation;
Copy

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;
Copy

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;
Copy

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;
Copy

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 soutenir la création et la gestion des tâches, Snowflake fournit l’ensemble suivant d’opérations DDL spéciales :

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 suivant :