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>' , ... ] ) ]
Où :
fromSpecification ::= { FROM @<stage> SPECIFICATION_FILE = '<yaml_file_stage_path>' | FROM SPECIFICATION <specification_text> }fromSpecificationTemplate ::= { FROM @<stage> SPECIFICATION_TEMPLATE_FILE = '<yaml_file_stage_path>' | FROM SPECIFICATION_TEMPLATE <specification_text> } USING ( <key> => <value> [ , <key> => <value> [ , ... ] ] )
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'
. LorsqueSPECIFICATION_TEMPLATE_FILE
est spécifié, le paramètreUSING
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. LorsqueSPECIFICATION_TEMPLATE
est spécifié, le paramètreUSING
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
ouFROM 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>
$$;
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
$$
La commande ne spécifie pas le paramètre ASYNC
facultatif. Par conséquent, Snowflake exécute la commande de manière synchrone.