Création d’une procédure stockée¶
Vous pouvez créer une procédure stockée en utilisant l’une des méthodes disponibles avec Snowflake. Ces méthodes sont décrites dans cette rubrique.
Créer une procédure¶
Écrivez une logique de procédure en tant que gestionnaire à l’aide de l’un des langages pris en charge, comme Python, Java et Scala.
Choisissez un outil ou une API pour créer la procédure avec le gestionnaire que vous avez écrit.
Pour plus d’informations sur chacun de ces éléments, voir Outils de création de procédures.
SQL
Utilisez SQL et écrivez la logique dans un ou plusieurs langages.
Snowpark
Utilisez l’API Snowpark pour Java, Python ou Scala.
Ligne de commande
Exécutez les commandes Snowflake CLI pour créer la procédure.
Python API
Exécutez les commandes Python côté client pour créer la procédure.
REST
Faites des requêtes auprès d’une API RESTful pour créer la procédure.
Exécutez la procédure à l’aide de l’un des outils suivants, en fonction de vos besoins.
Outils de création de procédures¶
Vous pouvez créer une procédure en utilisant l’une des méthodes disponibles avec Snowflake, en fonction du langage et de l’ensemble des compétences dont vous disposez. Choisissez l’outil qui correspond à vos besoins dans la table suivante.
Langage |
Approche |
---|---|
SQL Exécutez une commande SQL, par exemple en utilisant l”Snowsight. |
Exécutez la commande SQL CREATE PROCEDURE pour créer une procédure avec un code gestionnaire écrit dans l’un des langages suivants : |
Java, Python, ou Scala Écrivez du code dans l’un des langages pris en charge, puis exécutez le code localement pour effectuer des opérations dans Snowflake. |
Exécutez le code client qui utilise les APIs Snowpark dans l’un des langages suivants. |
Ligne de commande Créez et gérez des entités Snowflake en exécutant des commandes à partir de la ligne de commande. |
Exécutez des commandes de la CLI Snowflake. |
Python Sur le client, écrivez du code qui exécute des opérations de gestion sur Snowflake. |
Exécutez du code qui utilise l’API Snowflake Python. |
APIs RESTful (indépendantes du langage) Effectuez des requêtes auprès des points de terminaison RESTful pour créer et gérer des entités Snowflake. |
Faites une requête pour créer une procédure à l’aide de l’API REST Snowflake. |
Propriétés clés¶
Les paragraphes suivants décrivent certaines des propriétés requises ou généralement utilisées lors de la création d’une procédure.
- Nom de la procédure:
Le nom de la procédure ne doit pas nécessairement correspondre au nom du gestionnaire. Pour plus d’informations sur les contraintes et les conventions relatives aux noms, voir Nommage et surcharge de procédures et d’UDFs.
- Arguments:
Pour plus d’informations sur les exigences, voir Définition des arguments pour UDFs et les procédures stockées.
- Type de retour:
Pour plus d’informations sur la façon dont Snowflake fait correspondre les types de données SQL aux types de données des gestionnaires, voir Mappage des types de données entre SQL et les langages de traitement.
- Nom du gestionnaire:
Si nécessaire, il s’agit du nom de la classe ou de la méthode contenant le code qui s’exécute lorsque la procédure est appelée. Vous devez spécifier un nom de gestionnaire uniquement pour les gestionnaires écrits en Java, Python et Scala. Pour les gestionnaires JavaScript et Snowflake Scripting, tout le code spécifié en ligne sera exécuté comme le gestionnaire.
- Dépendances:
Pour un gestionnaire écrit en Java, Python ou Scala, vous devrez peut-être aussi spécifier la bibliothèque Snowpark, par exemple lors de la création de la procédure.
Pour plus d’informations sur la mise à disposition des dépendances pour votre gestionnaire, voir Mettre les dépendances à la disposition de votre code.
- Environnement d’exécution du langage du gestionnaire:
Lorsque le langage du gestionnaire est Java, Python ou Scala, spécifiez la version d’exécution pour indiquer la version d’environnement d’exécution prise en charge à utiliser. Gardez à l’esprit que si vous utilisez la version par défaut, celle-ci évoluera au fil du temps.
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 PROCEDURE |
Schéma |
|
USAGE |
Procédure |
L’attribution du privilège USAGE à un rôle sur la procédure nouvellement créée permet aux utilisateurs ayant ce rôle d’appeler la procédure ailleurs dans Snowflake. |
USAGE |
Intégration de l’accès externe |
Obligatoire pour les intégrations, le cas échéant, spécifiées lors de la création de la procédure. Pour plus d’informations, voir CREATE EXTERNAL ACCESS INTEGRATION. |
READ |
Secret |
Obligatoire pour les secrets, le cas échéant, spécifiés lors de la création de la procédure. Pour plus d’informations, voir Création d’un secret pour représenter les identifiants de connexion et Utilisation de l’intégration de l’accès externe dans une fonction ou une procédure. |
USAGE |
Schéma |
Obligatoire pour les schémas contenant des secrets, le cas échéant, spécifiés lors de la création de la procédure. Pour plus d’informations, voir Création d’un secret pour représenter les identifiants de connexion et Utilisation de l’intégration de l’accès externe dans une fonction ou une procédure. |
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¶
Toutes les langues du gestionnaire¶
Les procédures stockées prennent en charge la surcharge. Deux procédures peuvent avoir le même nom si elles ont un nombre différent de paramètres ou un type de données différent pour leurs paramètres.
Les procédures stockées ne sont pas atomiques ; si une instruction d’une procédure stockée échoue, les autres instructions de la procédure stockée ne sont pas nécessairement annulées. Pour des informations sur les procédures et les transactions stockées, voir Gestion des transactions.
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.
Astuce
Si votre organisation utilise une combinaison de procédures stockées relatives aux droits de l’appelant et aux droits du propriétaire, vous pouvez utiliser une convention de dénomination pour vos procédures stockées afin d’indiquer si une procédure stockée individuelle est une procédure stockée avec droits d’un appelant ou une procédure stockée avec droits du propriétaire.
Java¶
Voir les limitations connues.
Javascript¶
Une procédure stockée JavaScript ne peut renvoyer qu’une seule valeur, telle qu’une chaîne (par exemple, un indicateur de réussite/échec) ou un nombre (par exemple, un code d’erreur). Si vous devez renvoyer des informations plus détaillées, vous pouvez renvoyer un VARCHAR contenant des valeurs séparées par un délimiteur (tel qu’une virgule) ou un type de données semi-structuré, tel que VARIANT.
Python¶
Voir les limitations connues.
Scala¶
Voir les limitations connues.
Créer une procédure stockée avec SQL¶
Vous pouvez créer une procédure stockée avec SQL en suivant les étapes suivantes.
Note
Vous pouvez également créer et appeler une procédure qui n’est pas stockée pour une utilisation ultérieure. De nombreuses propriétés pour ce type de procédure sont les mêmes que pour une procédure stockée. Pour plus d’informations, voir CALL (avec procédure anonyme).
Écrivez le code du gestionnaire qui s’exécute lorsque la procédure est appelée.
Vous pouvez utiliser l’un des langages du gestionnaire pris en charge. Pour plus d’informations, voir Langages et outils pris en charge.
Choisissez si vous allez garder le code du gestionnaire en ligne avec l’instruction CREATE PROCEDURE SQL ou si vous allez y faire référence dans une zone de préparation.
Chacun a ses avantages. Pour plus d’informations, voir Conserver le code du gestionnaire en ligne ou dans une zone de préparation.
Exécutez une instruction CREATE PROCEDURE dans SQL, en spécifiant les propriétés de la procédure.
Le code de l’exemple suivant crée une procédure appelée
myProc
avec un gestionnaire en ligneMyClass.myMethod
. Le langage du gestionnaire est Java, qui (comme les gestionnaires de procédures écrits en Scala et Python) nécessite un objet Session de la bibliothèque Snowpark. Ici, la clause PACKAGES fait référence à la bibliothèque Snowpark incluse dans Snowflake.CREATE OR REPLACE PROCEDURE myProc(fromTable STRING, toTable STRING, count INT) RETURNS STRING LANGUAGE JAVA RUNTIME_VERSION = '11' PACKAGES = ('com.snowflake:snowpark:latest') HANDLER = 'MyClass.myMethod' AS $$ import com.snowflake.snowpark_java.*; public class MyClass { public String myMethod(Session session, String fromTable, String toTable, int count) { session.table(fromTable).limit(count).write().saveAsTable(toTable); return "Success"; } } $$;