Création de procédures stockées pour DataFrames dans Java¶
En utilisant l’API Snowpark, vous pouvez créer des procédures stockées pour votre expression lambda personnalisée dans Java. Vous pouvez appeler ces procédures stockées pour traiter les données de votre site DataFrame
.
Vous pouvez créer :
Procédures stockées temporaires qui n’existent que dans la session en cours.
Procédures stockées permanentes que vous pouvez utiliser dans d’autres sessions, y compris à partir d’une feuille de calcul Snowflake.
Création d’une procédure stockée temporaire¶
Vous pouvez créer une procédure temporaire qui ne durera que pour la session en cours. La procédure temporaire peut être :
Une procédure anonyme que vous pouvez appeler par référence, par exemple en passant une variable de type com.snowflake.snowpark_java.StoredProcedure la représentant au code qui appelle la procédure.
Une procédure nommée avec un nom que vous attribuez. Vous pouvez appeler la procédure par son nom à partir d’autres codes au sein de la session.
Pour créer une procédure temporaire, vous l’enregistrez avec l’une des méthodes registerTemporary
de com.snowflake.snowpark_java.SProcRegistration. La méthode est surchargée plusieurs fois pour prendre en charge différents nombres d’arguments de procédure. Pour obtenir une instance de SProcRegistration
, appelez la méthode sproc de la classe com.snowflake.snowpark_java.Session.
Lorsque vous appelez registerTemporary
, vous pouvez transmettre les arguments suivants :
Le nom de la procédure (lorsqu’il s’agit d’une procédure nommée).
La procédure elle-même en tant qu’expression lambda.
Les types de données des paramètres sous forme d’un seul ou d’un tableau de la classe
com.snowflake.snowpark_java.types.DataType
. Omettez cet argument si la procédure que vous créez n’a pas de paramètres.Ceux-ci doivent correspondre aux types de paramètres définis dans la procédure.
Renvoyer le type de données sous la forme d’une classe
com.snowflake.snowpark_java.types.DataType
.
Vous pouvez appeler la procédure avec une méthode storedProcedure
de la classe com.snowflake.snowpark_java.Session.
Création d’une procédure temporaire anonyme¶
Pour créer une procédure temporaire anonyme, vous l’enregistrez en tant que procédure temporaire sans spécifier de nom. Snowflake créera un nom caché pour son propre usage.
Le code de l’exemple suivant appelle la méthode SProcRegistration.registerTemporary
pour créer une procédure anonyme à partir d’une expression lambda. La procédure prend comme arguments un objet Session
et un nombre entier. La méthode enregistre un DataTypes.IntegerType
comme type de paramètre unique et un DataTypes.IntegerType
comme type de retour.
La procédure elle-même prend pour arguments un objet Session
et un nombre entier. L’argument Session
représente un paramètre implicite que les appelants n’ont pas besoin de passer en tant qu’argument.
Session session = Session.builder().configFile("my_config.properties").create();
StoredProcedure sp =
session.sproc().registerTemporary(
(Session spSession, Integer num) -> num + 1,
DataTypes.IntegerType,
DataTypes.IntegerType
);
Le code de l’exemple suivant appelle la procédure anonyme, en passant la variable sp
et 1
comme arguments. Notez que l’objet Session
est un argument implicite que vous n’avez pas besoin de transmettre lorsque vous appelez la procédure.
session.storedProcedure(sp, 1).show();
Création d’une procédure temporaire nommée¶
Pour créer une procédure temporaire nommée, vous l’enregistrez en tant que procédure temporaire, en lui transmettant son nom comme l’un des arguments.
Le code de l’exemple suivant appelle la méthode registerTemporary
pour créer une procédure temporaire nommée increment
à partir d’une expression lambda, en passant le nom de la procédure comme argument. La méthode enregistre un DataTypes.IntegerType
comme type de paramètre unique et un DataTypes.IntegerType
comme type de retour.
La procédure elle-même prend pour arguments un objet Session
et un nombre entier. L’argument Session
représente un paramètre implicite que les appelants n’ont pas besoin de passer en tant qu’argument.
Session session = Session.builder().configFile("my_config.properties").create();
String procName = "increment";
StoredProcedure tempSP =
session.sproc().registerTemporary(
procName,
(Session session, Integer num) -> num + 1,
DataTypes.IntegerType,
DataTypes.IntegerType
);
Le code de l’exemple suivant appelle la procédure increment
, en lui transmettant le nom de la procédure et 1
comme arguments. Notez que l’objet Session
est un argument implicite que vous n’avez pas besoin de transmettre lorsque vous appelez la procédure.
session.storedProcedure(procName, 1).show();
Création d’une procédure stockée permanente¶
Vous pouvez créer une procédure stockée permanente que vous pouvez appeler à partir de n’importe quelle session, y compris à partir d’une feuille de calcul Snowflake.
Pour créer une procédure permanente, vous l’enregistrez avec une méthode registerPermanent
de la classe com.snowflake.snowpark_java.SProcRegistration. La méthode est surchargée plusieurs fois pour prendre en charge différents nombres d’arguments de procédure.
Lorsque vous appelez registerPermanent
, vous transmettez les arguments suivants :
Nom de la procédure.
La procédure elle-même en tant qu’expression lambda.
Les types de données des paramètres sous forme d’un seul ou d’un tableau de la classe
com.snowflake.snowpark_java.types.DataType
. Omettez cet argument si la procédure que vous créez n’a pas de paramètres.Ceux-ci doivent correspondre aux types de paramètres définis dans la procédure.
Le type de données de retour sous forme de classe
com.snowflake.snowpark_java.types.DataType
.Une zone de préparation existante vers laquelle Snowflake doit copier les fichiers résultant de la compilation de la procédure.
Snowflake copiera toutes les données connexes, y compris les dépendances et les fonctions lambda. Il doit s’agir d’une zone de préparation permanente (et non d’une zone temporaire de session), car cette procédure stockée peut être invoquée en dehors de la session en cours. Si la procédure est abandonnée par la suite, vous devez supprimer manuellement les fichiers connexes de la zone de préparation.
Valeur booléenne indiquant si cette procédure doit être exécutée avec les droits de l’appelant.
À propos des droits de l’appelant et des droits du propriétaire, consultez Understanding Caller’s Rights and Owner’s Rights Stored Procedures.
Le code de l’exemple suivant appelle la méthode registerPermanent
pour créer une procédure permanente appelée add_hundred
à partir d’une expression lambda.
La méthode enregistre un DataTypes.IntegerType
comme type de paramètre unique et un DataTypes.IntegerType
comme type de retour. Il précise une zone de préparation appelée sproc_libs
pour la procédure et ses dépendances. Il précise également que la procédure doit être exécutée avec les droits de l’appelant.
La procédure elle-même prend pour arguments un objet Session
et un nombre entier. L’argument Session
représente un paramètre implicite que les appelants n’ont pas besoin de passer en tant qu’argument.
Session session = Session.builder().configFile("my_config.properties").create();
String procName = "add_hundred";
String stageName = "sproc_libs";
StoredProcedure sp =
session.sproc().registerPermanent(
procName,
(Session session, Integer num) -> num + 100,
DataTypes.IntegerType,
DataTypes.IntegerType,
stageName,
true
);
Le code de l’exemple suivant appelle la procédure add_hundred
à l’aide d’une méthode storedProcedure
de la classe com.snowflake.snowpark_java.Session. L’appel transmet le nom de la procédure et 1
comme arguments. Notez que l’objet Session
utilisé comme argument dans le gestionnaire est un argument implicite que vous ne devez pas transmettre lorsque vous appelez la procédure.
session.storedProcedure(procName, 1).show();