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.

You can use this Session object to call APIs in the Snowpark library. For example, you can create a DataFrame for a table or execute a SQL statement.

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 Snowpark

  • Le 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"
  }
}
Copy

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"
  }
}
Copy