Mettre les dépendances à la disposition de votre code

Lorsque votre fonction définie par l’utilisateur (UDF) ou votre procédure stockée dépend du code ou des fichiers qui sont externes à l’UDF ou à la procédure, vous pouvez mettre la dépendance à la disposition de l’UDF ou de la procédure en la téléchargeant dans une zone de préparation, puis en la référençant à cet emplacement.

Par exemple, vous pourriez vouloir que votre UDF ou votre procédure ait accès aux éléments suivants :

  • Le code du gestionnaire Python dans un module.

  • Le code du gestionnaire Java ou Scala compilé et empaqueté dans un JAR.

  • Le code de dépendance écrit en Java, Python ou Scala.

  • Fichiers à lire par votre code de gestionnaire et dont le nom et l’emplacement sont connus lorsque vous créez l’UDF. Cela peut être utile pour les fichiers de configuration, par exemple.

Note

Vous pouvez également utiliser la clause PACKAGES de CREATE FUNCTION ou CREATE PROCEDURE pour importer des bibliothèques qui sont incluses dans Snowflake.

Dans ce chapitre :

Étapes de haut niveau

Suivez ces étapes pour mettre les dépendances à la disposition de votre fonction ou procédure.

  1. Choisissez ou créez une zone de préparation qui est disponible pour votre gestionnaire.

  2. Téléchargez la dépendance dans la zone de préparation.

  3. Référencez la dépendance avec IMPORTS lorsque vous créez la fonction ou la procédure.

Choisissez ou créez une zone de préparation pour les fichiers de dépendances

Pour mettre votre fichier de dépendances à la disposition d’une fonction ou d’une procédure, vous devez copier le fichier de dépendances dans une zone de préparation où il peut être atteint lors de l’exécution. Le propriétaire de la fonction ou procédure doit avoir le privilège READ sur la zone de préparation.

Typiquement, vous chargez la dépendance vers une zone de préparation interne nommée en utilisant la commande PUT. Pour plus d’informations sur la création de zones de préparation, voir CREATE STAGE.

Note

Notez que vous ne pouvez pas exécuter la commande PUT par la GUI de Snowflake ; vous pouvez utiliser SnowSQL pour exécuter PUT. Pour un exemple de commande PUT pour copier un fichier .jar dans une zone de préparation, voir Télécharger la dépendance dans la zone de préparation. dans ce sujet.

Choisissez ou créez l’un des types de zone de préparation suivants pour votre dépendance :

  • Une zone de préparation interne utilisateur ou nommée.

    Si vous prévoyez d’utiliser la commande PUT pour charger les fichiers, utilisez une zone de préparation interne nommée. Pour en savoir plus sur le choix d’un type de zone de préparation interne, voir Choix d’une zone de préparation interne pour les fichiers locaux.

  • Zone de préparation externe.

    Les zones de préparation externes sont des emplacements associés à des services de stockage externes, comme décrit dans CREATE STAGE. La commande PUT ne prend pas en charge le chargement de fichiers vers des zones de préparation externes.

Vous pouvez utiliser une zone de préparation existante ou alors en créer une nouvelle en exécutant CREATE STAGE. Par exemple, la commande suivante crée une nouvelle zone de préparation interne nommée mystage :

CREATE STAGE mystage;
Copy

Note

Snowflake ne prend actuellement pas en charge l’utilisation d’une zone de préparation de table pour stocker le code du gestionnaire.

Télécharger la dépendance dans la zone de préparation.

Téléchargez les fichiers requis pour votre procédure stockée vers une zone de préparation.

Si vous utilisez une zone de préparation externe, utilisez les moyens de ce service de stockage pour télécharger des fichiers. Si vous utilisez une zone de préparation interne, vous pouvez copier le fichier d’un lecteur local vers la zone de préparation en utilisant la commande PUT. Pour la référence de la commande, voir PUT. Pour des informations sur la mise en zone de préparation de fichiers avec PUT, voir Mise en zone de préparation des fichiers de données à partir d’un système de fichiers local.

Utilisez la commande PUT pour charger les fichiers vers la zone de préparation.

Le code de l’exemple suivant télécharge myjar.jar vers une zone de préparation appelée mystage, en écrasant un fichier existant du même nom s’il existe.

PUT file:///Users/MyUserName/MyCompiledJavaCode.jar
  @mystage
  AUTO_COMPRESS = FALSE
  OVERWRITE = TRUE
  ;
Copy

Note

Si vous omettez AUTO_COMPRESS = FALSE, la commande PUT compresse automatiquement le fichier. Le nom du fichier compressé sur la zone de préparation sera myjar.jar.gz. Plus tard, lorsque vous exécuterez la commande telle que CREATE PROCEDURE, vous devrez spécifier le nom de fichier avec cette extension .gz dans la clause IMPORTS.

Note

La commande PUT ne prend pas en charge le chargement de fichiers vers des zones de préparation externes. Pour charger des fichiers vers des zones de préparation externes, utilisez les utilitaires fournis par le service Cloud.

Référencement de la dépendance

Pour qu’une fonction ou une procédure que vous créez connaisse l’emplacement de la dépendance, spécifiez l’emplacement de la dépendance dans la clause IMPORTS de la SQL que vous utilisez pour créer la fonction ou la procédure.

Si vous avez plusieurs fichiers de dépendances, par exemple lorsque vous avez des bibliothèques tierces dont dépend un gestionnaire, vous pouvez spécifier l’emplacement de la zone de préparation et le chemin ainsi que le nom de tous les fichiers de dépendances comme valeurs de la clause IMPORTS.

Le code de l’exemple suivant crée une procédure appelée MYPROC, en spécifiant que le fichier MyCompiledJavaCode.jar (dans la zone de préparation mystage) doit être inclus dans l’environnement d’exécution de la procédure. Dans ce cas, MyCompiledJavaCode.jar contient le gestionnaire de la procédure – le code compilé pour MyJavaClass.run.

CREATE OR REPLACE PROCEDURE MYPROC(value INT, fromTable STRING, toTable STRING, count INT)
  RETURNS INT
  LANGUAGE JAVA
  RUNTIME_VERSION = '11'
  PACKAGES = ('com.snowflake:snowpark:latest')
  IMPORTS = ('@mystage/MyCompiledJavaCode.jar')
  HANDLER = 'MyJavaClass.run';
Copy