Zugriff auf Daten mit Scala aus mit SQL erstellten gespeicherten Prozeduren

Um mit einem in Scala geschriebenen Handler für gespeicherte Prozeduren auf Daten zuzugreifen, verwenden Sie die Snowpark-Bibliothek APIs.

Bei der Verarbeitung eines Aufrufs Ihrer gespeicherten Scala-Prozedur erstellt Snowflake ein Snowpark-Session-Objekt und übergibt das Objekt an die Methode oder Funktion für Ihre gespeicherte Prozedur.

Wie bei gespeicherten Prozeduren, deren Handler in anderen Sprachen geschrieben sind, wird der Kontext für die Sitzung (z. B. die Berechtigungen, die aktuelle Datenbank, das aktuelle Schema usw.) dadurch bestimmt, ob die gespeicherte Prozedur mit Aufruferrechten oder mit Eigentümerrechten ausgeführt wird. Weitere Details dazu finden Sie unter Zugriff auf und Einstellung des Sitzungsstatus.

Sie können dieses Session-Objekt verwenden, um APIs in der Snowpark-Bibliothek aufzurufen. Sie können zum Beispiel einen DataFrame für eine Tabelle erstellen oder eine SQL-Anweisung ausführen.

Weitere Informationen dazu finden Sie im Snowpark-Entwicklerhandbuch für Scala.

Bemerkung

Weitere Informationen zu Einschränkungen, einschließlich Einschränkungen beim Zugriff auf Daten, finden Sie unter Beschränkungen für Scala in mit SQL erstellten gespeicherten Prozeduren.

Beispiel für Datenzugriff

Es folgt ein Beispiel für eine Scala-Methode, die eine bestimmte Anzahl von Zeilen aus einer Tabelle in eine andere Tabelle kopiert. Der Methode werden die folgenden Argumente übergeben:

  • Ein Snowpark-Session-Objekt

  • Der Name der Tabelle, aus der die Zeilen kopiert werden sollen

  • Der Name der Tabelle, in der die Zeilen gespeichert werden sollen

  • Die Anzahl der zu kopierenden Zeilen

Die Methode in diesem Beispiel gibt eine Zeichenfolge zurück.

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

Im folgenden Beispiel wird statt einer Methode eine Funktion definiert:

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