Création de procédures stockées pour DataFrames dans Scala¶
En utilisant l’API Snowpark, vous pouvez créer des procédures stockées pour vos expressions lambda et vos fonctions personnalisées. 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 com.snowflake.snowpark.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.SProcRegistration. La méthode est surchargée plusieurs fois pour prendre en charge différents nombres d’arguments de procédure.
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.
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 fonction lambda. La fonction 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.
val session = Session.builder.configFile("my_config.properties").create
val sp = session.sproc.registerTemporary(
(session: Session, num: Int) => num + 1
)
Le code de l’exemple suivant appelle la procédure anonyme à l’aide de la méthode storedProcedure
de la classe com.snowflake.snowpark.Session, 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 add_two
à partir d’une expression lambda, en passant le nom de la procédure comme argument. La méthode enregistre un Int
comme type de paramètre unique.
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.
val session = Session.builder.configFile("my_config.properties").create
val procName: String = "add_two"
val tempSP: StoredProcedure =
session.sproc.registerTemporary(
procName,
(session: Session, num: Int) => num + 2)
Le code de l’exemple suivant appelle la procédure add_two
à l’aide d’une méthode storedProcedure
de la classe com.snowflake.snowpark.Session, en passant 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.SProcRegistration. La méthode est surchargée plusieurs fois pour répondre à diverses exigences en matière de procédures.
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.
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 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.
val session = Session.builder.configFile("my_config.properties").create
val procName: String = "add_hundred"
val stageName: String = "sproc_libs"
val sp: StoredProcedure =
session.sproc.registerPermanent(
procName,
(session: Session, num: Int) => num + 100,
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.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()