Introduction aux tâches

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

Dans Snowflake, une tâche peut exécuter un appel à une procédure stockée à l’aide des langages et outils pris en charge, comme SQL, JavaScript, Python, Java, Scala ou Snowflake Scripting. Pour d’autres exemples en Python, voir Gestion des tâches et des graphiques de tâches Snowflake avec Python.

Vous pouvez combiner une séquence de tâches en créant des graphiques de tâches. Les graphiques de tâches peuvent utiliser une logique leur permettant d’adopter un comportement dynamique afin d’exécuter des tâches en parallèle ou de manière séquentielle.

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.

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

  4. Autorisez la tâche à s’exécuter en continu à l’aide de ALTER TASK. .. RESUME.

  5. Surveiller les coûts des tâches

  6. Affinez la tâche si nécessaire à l’aide de ALTER TASK.

Pour plus d’informations sur l’exécution des tâches, voir :

Attribuer des 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. 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.

Ce modèle est recommandé pour les tâches qui s’exécutent de manière régulière ou semi-régulière, telles que :

  • Les tâches qui démarrent toujours à la même heure.

  • Les tâches qui ne s’exécutent qu’à l’arrivée de nouvelles données. (Pour plus d’informations, voir Tâches déclenchées.)

Limitations

  • La taille maximale de calcul pour une tâche sans serveur est équivalente à un entrepôt virtuel XXLARGE.

  • La durée totale d’une tâche peut inclure un délai précédant le début de cette tâche. Pour plus d’informations, voir Durée de la tâche.

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 EXECUTEMANAGEDTASK. 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 : la fenêtre de temps pendant laquelle la tâche doit être exécutée.

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.

Diagramme illustrant le modèle de calcul des tâches sans serveur.

Vous pouvez définir la période cible à l’aide de 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.

Diagramme montrant une tâche sans serveur planifiée pour s'exécuter quotidiennement entre minuit et 2 heures du matin.

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

  • Si les tâches se terminent trop rapidement (dans un délai plusieurs fois inférieur à la période cible), Snowflake réduit les ressources attribuées pour les exécutions suivantes de une taille d’entrepôt, jusqu’à atteindre la valeur SERVERLESS_TASK_MIN_STATEMENT_SIZE.

  • 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. Lorsque la valeur SERVERLESS_TASK_MAX_STATEMENT_SIZE est atteinte, les tâches se poursuivent (en dépassant éventuellement la période cible) jusqu’à ce qu’elles se terminent ou qu’un délai d’expiration soit écoulé.

Exemples

Exemple 1 : Créer une tâche sans serveur à exécuter toutes les heures. Snowflake attribue des ressources de calcul sans serveur dont on estime qu’elles permettront d’accomplir la tâche dans les délais planifiés.

CREATE TASK SCHEDULED_T1
  SCHEDULE='60 MINUTES'
  AS SELECT 1;
Copy

Exemple 2 : Créer une tâche sans serveur à exécuter tous les jours, à partir de minuit et pendant 2 heures. La planification (à l’aide de CRON) définit le moment où la tâche commence, y compris le fuseau horaire. L’intervalle d’achèvement cible définit le moment où la tâche doit se terminer. Snowflake estime et affecte le calcul sans serveur de manière à ce que la tâche se termine dans l’intervalle de temps planifié.

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

Exemple 3 : Créer une tâche sans serveur planifiée une fois par jour avec un intervalle d’achèvement cible déterminé 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'
  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.

Exemple 4 : Créer une tâche sans serveur planifiée pour s’exécuter toutes les 10 secondes sans intervalle d’achèvement cible :

CREATE TASK SCHEDULED_T4
  SCHEDULE='10 SECONDS'
  SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
  AS SELECT 1;
Copy

Avec cette configuration, la tâche sans serveur s’exécute toutes les 10 secondes. 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 plus d’informations, voir Durée de la tâche.

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 l’utilisateur

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.

Définir des planifications ou des déclencheurs

Une tâche peut être paramétrée pour s’exécuter selon une planification fixe ou être déclenchée par un événement, par exemple lorsqu’un flux contient de nouvelles données.

Remarque : même si une planification ou un déclencheur sont définis, la tâche démarre dans un état suspendu. Par la suite, vous pouvez lancer une seule exécution de la tâche à l’aide de EXECUTE TASK, ou laisser la tâche s’exécuter en continu à l’aide de ALTER TASK. .. RESUME.

Exécuter une tâche selon une planification fixe

Pour exécuter une tâche selon une planification fixe, définissez la planification lors de la création ou de la modification de cette tâche à l’aide de CREATE TASK ou de ALTER TASK, ou en modifiant la tâche dans Snowsight, à l’aide du paramètre SCHEDULE.

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.

L’exemple suivant crée une tâche qui s’exécute toutes les 10 secondes :

CREATE TASK task_runs_every_10_seconds
  SCHEDULE='10 SECONDS'
  AS SELECT 1;
Copy

Pour définir une planification basée sur une heure ou un jour spécifiques, utilisez le paramètre SCHEDULE =”USING CRON. ..”.

L’exemple suivant crée une tâche qui s’exécute tous les dimanches à 3 heures du matin, en utilisant le fuseau horaire Americas/Los_Angeles.

CREATE TASK task_sunday_3_am_pacific_time_zone
  SCHEDULE='USING CRON 0 3 * * SUN America/Los_Angeles'
AS SELECT 1;
Copy

Pour plus d’informations, voir CREATETASK … SCHEDULE.

Exécutez une tâche chaque fois qu’un flux contient de nouvelles données

Utilisez Tâches déclenchées pour exécuter des tâches chaque fois qu’un flux déterminé contient de nouvelles données, comme dans les workflows ELT (extraire, charger, transformer). 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. Exemple :

CREATE TASK triggered_task_stream
  WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
  AS
    INSERT INTO completed_promotions
    SELECT order_id, order_total, order_time, promotion_id
    FROM orders_stream;
Copy

Pour plus d’informations, voir Tâches déclenchées.

Exécution selon une planification, mais uniquement si un flux contient de nouvelles données

Vous pouvez combiner une tâche planifiée avec une tâche déclenchée. Par exemple, vous pouvez paramétrer une tâche pour qu’elle s’exécute toutes les heures, mais uniquement si le flux contient de nouvelles données. Exemple :

CREATE TASK triggered_task_stream
  SCHEDULE = '1 HOUR'
  WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
  AS SELECT 1;
Copy

Définir ce qui se passe en cas d’échec d’une tâche

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éfinir des paramètres de session supplémentaires

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.

Pour définir les paramètres de session d’une tâche, ajoutez le ou les paramètres voulus à la définition de cette tâche à l’aide de CREATE TASK, ou modifiez la tâche à l’aide de ALTER TASK. .. SET. Exemples :

CREATE TASK my_task
  SCHEDULE = 'USING CRON 0 * * * * UTC'
  TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
  AS
    INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);
Copy
ALTER TASK my_task
  SET USER_TASK_TIMEOUT_MS = 10000  -- Changes maximum runtime to 10 seconds
Copy

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, et comment la version d’une tâche est déterminée.

Exécuter une tâche manuellement

Après avoir défini une nouvelle tâche et ses paramètres à l’aide de CREATE TASK ou ALTER TASK, vous pouvez lancer une exécution unique de la tâche à l’aide de EXECUTE TASK. Cette commande est utile pour tester des tâches nouvelles ou modifiées.

Note

  • Vous pouvez appeler cette commande SQL directement dans les scripts ou dans les procédures stockées.

  • Cette commande prend en charge l’intégration des tâches dans des pipelines de données externes.

  • Tout service tiers capable de s’authentifier sur votre compte Snowflake et d’autoriser les actions SQL peut exécuter des tâches à l’aide de la commande EXECUTE TASK.

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

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 des Tâches déclenchées pour les tâches qui ne doivent être exécutées que dans certaines conditions, par exemple lorsqu’un flux de données contient de nouvelles données.

  • 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ù <database_name> est la base de données qui contient la tâche et <task_name> 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

Surveillance des coûts

L’utilisation de tâches sans serveur entraîne des coût de calcul. Vous pouvez utiliser les vues relatives aux coûts des schémas ACCOUNT_USAGE et ORGANIZATION_USAGE pour suivre les coûts associés aux tâches sans serveur. Lorsque vous interrogez ces vues, appliquez un filtre à la colonne service_type pour trouver les valeurs SERVERLESS_TASK ou SERVERLESS_TASK_FLEX.

Vue

Schéma

service_type

Rôles avec privilèges requis

METERING_HISTORY

ACCOUNT_USAGE

SERVERLESS_TASK

Rôle ACCOUNTADMIN, rôle de base de données USAGE_VIEWER

METERING_DAILY_HISTORY

ACCOUNT_USAGE

SERVERLESS_TASK

Rôle ACCOUNTADMIN, rôle de base de données USAGE_VIEWER

METERING_DAILY_HISTORY

ORGANIZATION_USAGE

SERVERLESS_TASK

Rôle ACCOUNTADMIN, rôle de base de données USAGE_VIEWER

USAGE_IN_CURRENCY_DAILY

ORGANIZATION_USAGE

SERVERLESS_TASK

Rôle ORGADMIN, rôle GLOBALORGADMIN, rôle base de données ORGANIZATION_USAGE_VIEWER

Exemple : Visualiser le coût total lié aux tâches sans serveur par compte à l’échelle de l’organisation.

Exemple : Visualiser le coût total lié aux tâches sans serveur pour le compte du 1er au 31 décembre 2024.

SELECT
 name,
 SUM(credits_used_compute) AS total_credits
FROM
  SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY
WHERE
 service_type ILIKE '%SERVERLESS_TASK%'
 AND start_time >= '2024-12-01'
 AND end_time <= '2024-12-31'
GROUP BY
 name
ORDER BY
 name ASC;
Copy

Exemple : Visualiser le coût total lié aux tâches sans serveur par compte à l’échelle de l’organisation.

SELECT
  usage_date AS date,
  account_name,
  SUM(usage) AS credits,
  currency,
  SUM(usage_in_currency) AS usage_in_currency
FROM
  SNOWFLAKE.ORGANIZATION_USAGE.USAGE_IN_CURRENCY_DAILY
WHERE
  USAGE_TYPE ILIKE '%SERVERLESS_TASK%'
GROUP BY
  usage_date, account_name, currency
ORDER BY
  USAGE_DATE DESC;
Copy

Pour obtenir des informations sur le nombre de crédits facturés par heure de calcul pour l’opération du Trust Center, reportez-vous à la table 5 de la Snowflake Service Consumption Table.

Durée de la tâche

La durée d’une tâche correspond au temps écoulé entre le moment où le démarrage de cette tâche est planifié et la fin de son exécution. Cette durée comprend les deux éléments suivants :

  • Temps d’attente : le temps qu’une tâche passe à attendre que les ressources de calcul soient disponibles avant de commencer son exécution. Pour calculer le temps de file d’attente, interrogez la Vue TASK_HISTORY et comparez les valeurs SCHEDULED_TIME et QUERY_START_TIME.

  • Temps d’exécution : le temps nécessaire à la tâche pour exécuter ses instructions SQL ou d’autres opérations. Pour calculer le temps d’exécution, interrogez la Vue TASK_HISTORY et comparez les valeurs QUERY_START_TIME et COMPLETED_TIME.

Par exemple, le diagramme suivant montre une tâche sans serveur planifiée pour s’exécuter toutes les 15 secondes. La durée d’exécution totale de cette tâche est de 12 secondes, dont 5 secondes de file d’attente et 7 secondes d’exécution.

Diagramme d'une tâche présentant un temps d'attente de 5 secondes et un temps d'exécution de 7 secondes. La tâche est planifiée pour s'exécuter toutes les 15 secondes.

Délais d’expiration

Si l’exécution d’une tâche dépasse la durée planifiée ou l’intervalle d’achèvement cible, la tâche continue par défaut à s’exécuter jusqu’à ce qu’elle soit terminée, qu’elle expire ou qu’elle échoue.

Lorsque STATEMENT_TIMEOUT_IN_SECONDS et label-user_task_timeout_ms sont tous deux définis, le délai d’expiration est la plus petite valeur non nulle de ces deux paramètres.

Lorsque STATEMENT_QUEUED_TIMEOUT_IN_SECONDS et USER_TASK_TIMEOUT_MS sont tous deux définis, la valeur de USER_TASK_TIMEOUT_MS prévaut.

Pour plus d’informations sur les délais d’expiration relatifs aux graphiques de tâches, voir Délais d’expiration du graphique de tâches.

Considérations

  • Pour les tâches sans serveur, Snowflake dimensionne automatiquement les ressources pour s’assurer que les tâches se terminent dans un intervalle d’achèvement cible, y compris le temps de file d’attente.

  • Pour les tâches gérées par l’utilisateur, des périodes d’attente plus longues sont courantes lorsque les tâches sont planifiées pour être exécutées dans un entrepôt partagé ou occupé.

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éez un rôle personnalisé, accordez-lui le privilège EXECUTE TASK, puis accordez ce rôle personnalisé à n’importe quel rôle de propriétaire de tâche pour permettre à celui-ci de modifier 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 :