Accéder aux données avec Scala à partir de procédures stockées créées avec SQL¶
Pour accéder aux données avec un gestionnaire de procédure stockée écrit en Scala, utilisez les APIs de la bibliothèque Snowpark.
Lors du traitement d’un appel à votre procédure stockée Scala, Snowflake crée un objet Snowpark Session
et transmet cet objet à la méthode ou à la fonction de votre procédure stockée.
Comme pour les procédures stockées dont les gestionnaires sont écrits dans d’autres langues, le contexte de la session (y compris les privilèges, la base de données et le schéma actuels, etc.) est déterminé par le fait que la procédure stockée s’exécute avec les droits de l’appelant ou les droits du propriétaire. Pour plus de détails, voir Accéder à l’état de la session et le définir.
Vous pouvez utiliser cet objet Session
pour appeler des APIs dans la bibliothèque Snowpark. Par exemple, vous pouvez créer un DataFrame pour une table ou exécuter une instruction SQL.
Voir le Guide du développeur Snowpark pour Scala pour plus d’informations.
Note
Pour plus d’informations sur les limitations, y compris celles concernant l’accès aux données, voir Limitations de Scala dans les procédures stockées créées à l’aide de SQL.
Exemple d’accès aux données¶
Voici un exemple de méthode Scala qui copie un nombre donné de lignes d’une table vers une autre table. La méthode accepte les arguments suivants :
Un objet
Session
SnowparkLe nom de la table à partir de laquelle les lignes doivent être copiées
Le nom de la table dans laquelle les lignes doivent être enregistrées
Le nombre de lignes à copier
La méthode dans cet exemple renvoie une chaîne.
object MyObject
{
def myProcedure(session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String =
{
session.table(fromTable).limit(count).write.saveAsTable(toTable)
return "Success"
}
}
L’exemple suivant définit une fonction, plutôt qu’une méthode :
object MyObject
{
val myProcedure = (session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String =>
{
session.table(fromTable).limit(count).write.saveAsTable(toTable)
"Success"
}
}