EXECUTE JOB SERVICE

Note

Cette opération n’est actuellement pas couverte par le niveau de service défini dans Politique de support et accord de niveau de service de Snowflake.

Exécute un service Snowpark Container Services sous forme de tâche.

Un service, créé à l’aide de CREATE SERVICE, fonctionne longtemps et vous devez l’arrêter explicitement lorsqu’il n’est plus nécessaire. Par ailleurs, une tâche, créée à l’aide de EXECUTE JOB SERVICE, est un service qui se termine à la sortie de votre code, à l’instar d’une procédure stockée. Lorsque tous les conteneurs sortent, la tâche est terminée.

Par défaut, le job s’exécute de manière synchrone ; la commande EXECUTE JOB SERVICE se termine uniquement à la sortie de tous les conteneurs. Une fois la tâche terminée, Snowflake effectue automatiquement le nettoyage nécessaire. Cependant, ce nettoyage n’est pas immédiat, car Snowflake conserve la tâche pendant une courte période afin de permettre aux clients de surveiller et de déboguer le service de la tâche après l’exécution.

Vous pouvez également exécuter le service de job de manière asynchrone en spécifiant le paramètre ASYNC facultatif. Dans ce cas, la commande renvoie immédiatement un résultat alors que le job est en cours d’exécution. Vous pouvez utiliser la commande DESCRIBE SERVICE pour demander la réalisation d’un job, puis appeler la fonction SYSTEM$WAIT_FOR_SERVICES pour attendre la fin du job.

Pour les jobs asynchrones, Snowflake n’effectue pas de nettoyage automatique après la réalisation. Vous devez exécuter explicitement la commande DROP SERVICE pour supprimer le job.

Lorsque le job est terminé, si aucun autre job ou service n’est en cours d’exécution sur ce nœud de pool de calcul, Snowflake peut considérer que le nœud est inactif et le récupérer. Dans ce cas, SYSTEM$GET_SERVICE_LOGS ne renverra pas les journaux de conteneurs locaux des conteneurs de jobs. Vous pouvez envisager de rendre les journaux des conteneurs persistants par rapport à une table d’événements. Pour plus d’informations, voir Accès aux journaux des conteneurs.

Notez que les paramètres de commande doivent être spécifiés dans un ordre précis. Pour plus d’informations, voir Notes sur l’utilisation.

Voir aussi :

SYSTEM$GET_SERVICE_STATUS — Obsolète , SYSTEM$GET_SERVICE_LOGS

Syntaxe

EXECUTE JOB SERVICE
  IN COMPUTE POOL <compute_pool_name>
  {
     fromSpecification
     | fromSpecificationTemplate
  }
  NAME = [<db>.<schema>.]<name>
  [ ASYNC = { TRUE | FALSE } ]
  [ QUERY_WAREHOUSE = <warehouse_name> ]
  [ COMMENT = '<string_literal>']
  [ EXTERNAL_ACCESS_INTEGRATIONS = ( <EAI_name> [ , ... ] ) ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Copy

Où :

fromSpecification ::=
  {
    FROM @<stage> SPECIFICATION_FILE = '<yaml_file_stage_path>'
    | FROM SPECIFICATION <specification_text>
  }
Copy
fromSpecificationTemplate ::=
  {
    FROM @<stage> SPECIFICATION_TEMPLATE_FILE = '<yaml_file_stage_path>'
    | FROM SPECIFICATION_TEMPLATE <specification_text>
  }
  USING ( <key> => <value> [ , <key> => <value> [ , ... ] ]  )
Copy

Paramètres requis

IN COMPUTE POOL compute_pool_name

Spécifie le nom du pool de calcul de votre compte sur lequel le service doit être exécuté.

FROM stage

Spécifie la zone de préparation interne de Snowflake où le fichier de spécification est stocké ; par exemple, @tutorial_stage.

SPECIFICATION_FILE = 'yaml_file_stage_path'

Spécifie le chemin d’accès au fichier de spécification du service sur la zone de préparation ; par exemple, 'some-dir/echo_spec.yaml'.

SPECIFICATION_TEMPLATE_FILE = 'yaml_file_stage_path'

Spécifie le chemin d’accès au fichier de modèle de la spécification de service dans la zone de préparation ; par exemple, 'some-dir/echo_template_spec.yaml'. Lorsque SPECIFICATION_TEMPLATE_FILE est spécifié, le paramètre USING est obligatoire.

FROM SPECIFICATION specification_text

Spécifie la spécification du service. Vous pouvez utiliser une paire de signes du dollar ($$) pour délimiter le début et la fin de la chaîne de spécification.

FROM SPECIFICATION_TEMPLATE specification_text

Spécifie la spécification du service. Vous pouvez utiliser une paire de signes du dollar ($$) pour délimiter le début et la fin de la chaîne de spécification. Lorsque SPECIFICATION_TEMPLATE est spécifié, le paramètre USING est obligatoire.

NAME = [db.schema.]name

Nom (à savoir, identificateur) du service qui s’exécute comme une tâche ; il doit être unique pour le schéma dans lequel le service est créé.

Les noms entre guillemets pour les caractères spéciaux ou les noms sensibles à la casse ne sont pas pris en charge. La même contrainte s’applique également aux noms des bases de données et des schémas dans lesquels vous créez un service. En d’autres termes, les noms de bases de données et de schémas sans guillemets sont valables lors de la création d’un service.

Paramètres facultatifs

ASYNC = { TRUE | FALSE }

Spécifie si le job doit être exécuté de manière asynchrone.

Par défaut : FALSE

QUERY_WAREHOUSE = warehouse_name

Entrepôt à utiliser si un conteneur de service se connecte à Snowflake pour exécuter une requête, mais ne spécifie pas explicitement un entrepôt à utiliser. Ce paramètre prend également en charge les références d’objet dans Native Apps. Pour plus d’informations, voir Demander des références et des privilèges au niveau de l’objet des consommateurs.

La valeur par défaut est : aucun.

EXTERNAL_ACCESS_INTEGRATIONS = ( EAI_name [ , ... ] )

Spécifie les noms des intégrations d’accès externes qui permettent à votre tâche d’accéder à des sites externes. Les noms de cette liste sont sensibles à la casse. Par défaut, les conteneurs d’application n’ont pas la permission d’accéder à Internet. Si vous souhaitez autoriser votre tâche à accéder à un site externe, créez une intégration d’accès externe (EAI) et configurez votre tâche pour qu’il utilise cette intégration. Pour plus d’informations, voir Configuration de la sortie réseau.

COMMENT = 'string_literal'

Spécifie un commentaire pour le service.

Par défaut : aucune valeur

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

Spécifie le nom de la balise et la valeur de la chaîne de la balise.

La valeur de la balise est toujours une chaîne de caractères et le nombre maximum de caractères pour la valeur de la balise est 256.

Pour plus d’informations sur la spécification des balises dans une instruction, voir Quota de balise pour les objets.

USING ( key => value [ , key => value [ , ... ] ]  )

Vous permet de fournir des valeurs pour paramétrer l’expansion du modèle de spécification.

USING est nécessaire lors de l’utilisation d’un modèle de spécification (FROM SPECIFICATION_TEMPLATE_FILE ou FROM SPECIFICATION_TEMPLATE). Les paires clé-valeur doivent former une liste séparée par des virgules.

Où :

  • key est le nom de la variable de modèle. Le nom de variable de modèle peut éventuellement être placé entre guillemets doubles (").

  • value est la valeur à attribuer à la variable du modèle. Les valeurs de chaîne doivent être encadrées par ' ou par $$. La valeur doit être soit alphanumérique, soit un JSON valide.

Exigences en matière de contrôle d’accès

Un rôle utilisé pour exécuter cette opération doit au minimum disposer des privilèges suivants :

Privilège

Objet

Remarques

CREATE SERVICE

Schéma

USAGE

Pool de calcul

READ

Zone de préparation

C’est à ce stade que la spécification est stockée.

READ

Référentiel d’images

Référentiel d’images référencées par la spécification.

Le privilège USAGE relatif à la base de données et au schéma parents est exigé pour effectuer des opérations sur tout objet d’un schéma.

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Notes sur l’utilisation

  • Lorsque vous appelez EXECUTE JOB SERVICE, les paramètres doivent être fournis dans l’ordre suivant : spécifiez le pool de calcul, suivi d’autres propriétés, et pour finir la spécification du service (fournissez soit le nom du fichier de spécification dans la zone de préparation, soit la spécification en ligne).

  • Concernant les métadonnées :

    Attention

    Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.

Exemples

Exécuter un service de job de Snowpark Container Services de manière asynchrone :

EXECUTE JOB SERVICE
  IN COMPUTE POOL tutorial_compute_pool
  NAME = tutorial_db.data_schema.example_job
  ASYNC = TRUE
  FROM @tutorial_stage
  FROM SPECIFICATION $$
  <job specification>
  $$;
Copy

Exécuter un service de tâche avec un stockage en bloc monté :

EXECUTE JOB SERVICE
  IN COMPUTE POOL tutorial_compute_pool
  NAME=tutorial_job_service
  FROM SPECIFICATION $$
  spec:
    container:
    - name: main
      image: /tutorial_db/data_schema/tutorial_repository/my_job_image:latest
      volumeMounts:
        - name: block-vol1
          mountPath: /opt/block/path
    volumes:
    - name: block-vol1
      source: block
      size: 10Gi
      blockConfig:
        iops: 4000
        throughput: 200
  $$
Copy

La commande ne spécifie pas le paramètre ASYNC facultatif. Par conséquent, Snowflake exécute la commande de manière synchrone.