Erstellen von gespeicherten Prozeduren für DataFrames in Scala¶
Mit der Snowpark-API können Sie gespeicherte Prozeduren für Ihre kundenspezifischen Lambdas und Funktionen erstellen. Sie können diese gespeicherten Prozeduren aufrufen, um die Daten in Ihrem DataFrame zu verarbeiten.
Sie können Folgendes erstellen:
Temporäre gespeicherte Prozeduren, die nur innerhalb der aktuellen Sitzung existieren.
Permanente gespeicherte Prozeduren, die Sie in anderen Sitzungen verwenden können, auch von einem Snowflake-Arbeitsblatt aus.
Erstellen einer temporären gespeicherten Prozedur¶
Sie können eine temporäre Prozedur erstellen, die nur für die aktuelle Sitzung gilt. Die temporäre Prozedur kann Folgendes sein:
Eine anonyme Prozedur, die Sie per Referenz aufrufen können (Call-by-Reference), indem Sie z. B. eine com.snowflake.snowpark.StoredProcedure-Variable, die sie repräsentiert, an den Code übergeben, der die Prozedur aufruft.
Eine benannte Prozedur mit einem von Ihnen zugewiesenen Namen. Sie können die Prozedur von anderem Code innerhalb der Sitzung aus über den Namen aufrufen.
Um eine temporäre Prozedur zu erstellen, registrieren Sie sie mit einer der registerTemporary
-Methoden von com.snowflake.snowpark.SProcRegistration. Die Methode ist mehrfach überladen, um eine unterschiedliche Anzahl von Prozedurargumenten zu unterstützen.
Wenn Sie registerTemporary
aufrufen, können Sie Folgendes als Argument übergeben:
Den Namen der Prozedur (wenn es sich um eine benannte Prozedur handelt)
Die Prozedur selbst als Lambda-Ausdruck
Erstellen einer anonymen temporären Prozedur¶
Um eine anonyme temporäre Prozedur zu erstellen, registrieren Sie sie als temporäre Prozedur, ohne einen Namen anzugeben. Snowflake erstellt einen versteckten Namen für seine eigene Verwendung.
Der Code im folgenden Beispiel ruft die Methode SProcRegistration.registerTemporary
auf, um eine anonyme Prozedur aus einer Lambda-Funktion zu erstellen. Der Funktion selbst werden ein Session
-Objekt und eine Ganzzahl als Argumente übergeben. Das Session
-Argument repräsentiert einen impliziten Parameter, den der Aufrufer nicht als Argument übergeben muss.
val session = Session.builder.configFile("my_config.properties").create
val sp = session.sproc.registerTemporary(
(session: Session, num: Int) => num + 1
)
Der Code im folgenden Beispiel ruft die anonyme Prozedur mit der Methode storedProcedure
der Klasse com.snowflake.snowpark.Session auf und übergibt die Variablen sp
und 1
als Argumente. Beachten Sie, dass das Session
-Objekt ein implizites Argument ist, das nicht übergeben werden muss, wenn Sie die Prozedur aufrufen.
session.storedProcedure(sp, 1).show()
Erstellen einer benannten temporären Prozedur¶
Um eine benannte temporäre Prozedur zu erstellen, registrieren Sie sie als temporäre Prozedur und übergeben ihren Namen als eines der Argumente.
Der Code im folgenden Beispiel ruft die Methode registerTemporary
auf, um eine benannte temporäre Prozedur namens add_two
aus einem Lambda-Ausdruck zu erstellen, wobei der Name der Prozedur als Argument übergeben wird. Die Methode registriert einen Typ Int
als den einen Parametertyp.
Der Prozedur selbst werden ein Session
-Objekt und eine Ganzzahl als Argumente übergeben. Das Session
-Argument repräsentiert einen impliziten Parameter, den der Aufrufer nicht als Argument übergeben muss.
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)
Der Code im folgenden Beispiel ruft die Prozedur add_two
mit einer storedProcedure
-Methode der Klasse com.snowflake.snowpark.Session auf und übergibt den Prozedurnamen und 1
als Argumente. Beachten Sie, dass das Session
-Objekt ein implizites Argument ist, das nicht übergeben werden muss, wenn Sie die Prozedur aufrufen.
session.storedProcedure(procName, 1).show()
Erstellen einer permanenten gespeicherten Prozedur¶
Sie können eine permanente gespeicherte Prozedur erstellen, die Sie von jeder Sitzung aus aufrufen können, auch aus einem Snowflake-Arbeitsblatt heraus.
Um eine permanente Prozedur zu erstellen, registrieren Sie sie mit einer registerPermanent
-Methode der Klasse com.snowflake.snowpark.SProcRegistration. Die Methode ist mehrfach überladen, um eine Vielzahl von Prozeduranforderungen zu unterstützen.
Wenn Sie registerPermanent
aufrufen, übergeben Sie Folgendes als Argumente:
Den Namen der Prozedur
Die Prozedur selbst als Lambda-Ausdruck
Einen vorhandenen Stagingbereich, in den Snowflake die Dateien kopieren soll, die beim Kompilieren der Prozedur entstehen.
Snowflake kopiert alle zugehörigen Daten, einschließlich Abhängigkeiten und Lambda-Funktionen. Dies muss ein permanenter Stagingbereich sein (nicht temporär für eine Sitzung), da diese gespeicherte Prozedur außerhalb der aktuellen Sitzung aufgerufen werden kann. Wenn der Vorgang später abgebrochen wird, müssen Sie die zugehörigen Dateien manuell aus dem Stagingbereich entfernen.
Einen booleschen Wert, der angibt, ob diese Prozedur mit Aufruferrechten ausgeführt werden soll.
Weitere Informationen zu Aufruferrechten und Eigentümerrechten finden Sie unter Understanding Caller’s Rights and Owner’s Rights Stored Procedures.
Der Code im folgenden Beispiel ruft die Methode registerPermanent
auf, um eine permanente Prozedur namens add_hundred
aus einem Lambda-Ausdruck zu erstellen.
Die Methode gibt einen Stagingbereich namens sproc_libs
für die Prozedur und deren Abhängigkeiten an. Sie legt auch fest, dass die Prozedur mit Aufruferrechten ausgeführt werden soll.
Der Prozedur selbst werden ein Session
-Objekt und eine Ganzzahl als Argumente übergeben. Das Session
-Argument repräsentiert einen impliziten Parameter, den der Aufrufer nicht als Argument übergeben muss.
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
)
Der Code im folgenden Beispiel ruft die Prozedur add_hundred
über eine storedProcedure
-Methode der Klasse com.snowflake.snowpark.Session auf. Der Aufruf übergibt als Argumente den Prozedurnamen und 1
. Beachten Sie, dass das im Handler als Argument verwendete Session
-Objekt ein implizites Argument ist, das Sie beim Aufruf der Prozedur nicht übergeben müssen.
session.storedProcedure(procName, 1).show()