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 :

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
)
Copy

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()
Copy

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)
Copy

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()
Copy

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
  )
Copy

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()
Copy