Erstellen von gespeicherten Prozeduren für DataFrames in Java¶
Mit der Snowpark-API können Sie gespeicherte Prozeduren für Ihren kundenspezifischen Lambda-Ausdruck in Java 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 Variable vom Typ com.snowflake.snowpark_java.StoredProcedure, 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_java.SProcRegistration. Die Methode ist mehrfach überladen, um eine unterschiedliche Anzahl von Prozedurargumenten zu unterstützen. Um eine SProcRegistration
-Instanz zu erhalten, rufen Sie die Methode sproc der Klasse com.snowflake.snowpark_java.Session auf.
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
Parameter-Datentypen als einzelnen Wert oder als Array der Klasse
com.snowflake.snowpark_java.types.DataType
Lassen Sie dieses Argument weg, wenn die Prozedur, die Sie erstellen, keine Parameter hat.Diese sollten den in der Prozedur definierten Parametertypen entsprechen.
Geben Sie den Datentyp als
com.snowflake.snowpark_java.types.DataType
-Klasse zurück.
Sie können die Prozedur mit einer storedProcedure
-Methode der Klasse com.snowflake.snowpark_java.Session aufrufen.
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 einem Lambda-Ausdruck zu erstellen. Der Prozedur werden ein Session
-Objekt und eine Ganzzahl als Argumente übergeben. Die Methode registriert einen Typ DataTypes.IntegerType
als einzigen Parametertyp und einen Typ DataTypes.IntegerType
als Rückgabetyp.
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.
Session session = Session.builder().configFile("my_config.properties").create();
StoredProcedure sp =
session.sproc().registerTemporary(
(Session spSession, Integer num) -> num + 1,
DataTypes.IntegerType,
DataTypes.IntegerType
);
Der Code im folgenden Beispiel ruft die anonyme Prozedur 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 increment
aus einem Lambda-Ausdruck zu erstellen, wobei der Name der Prozedur als Argument übergeben wird. Die Methode registriert einen Typ DataTypes.IntegerType
als einzigen Parametertyp und einen Typ DataTypes.IntegerType
als Rückgabetyp.
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.
Session session = Session.builder().configFile("my_config.properties").create();
String procName = "increment";
StoredProcedure tempSP =
session.sproc().registerTemporary(
procName,
(Session session, Integer num) -> num + 1,
DataTypes.IntegerType,
DataTypes.IntegerType
);
Der Code im folgenden Beispiel ruft die Prozedur increment
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_java.SProcRegistration. Die Methode ist mehrfach überladen, um eine unterschiedliche Anzahl von Prozedurargumenten zu unterstützen.
Wenn Sie registerPermanent
aufrufen, übergeben Sie Folgendes als Argumente:
Den Namen der Prozedur
Die Prozedur selbst als Lambda-Ausdruck
Parameter-Datentypen als einzelnen Wert oder als Array der Klasse
com.snowflake.snowpark_java.types.DataType
Lassen Sie dieses Argument weg, wenn die Prozedur, die Sie erstellen, keine Parameter hat.Diese sollten den in der Prozedur definierten Parametertypen entsprechen.
Den Rückgabedatentyp als eine
com.snowflake.snowpark_java.types.DataType
-KlasseEinen 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 registriert einen Typ DataTypes.IntegerType
als einzigen Parametertyp und einen Typ DataTypes.IntegerType
als Rückgabetyp. Sie 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.
Session session = Session.builder().configFile("my_config.properties").create();
String procName = "add_hundred";
String stageName = "sproc_libs";
StoredProcedure sp =
session.sproc().registerPermanent(
procName,
(Session session, Integer num) -> num + 100,
DataTypes.IntegerType,
DataTypes.IntegerType,
stageName,
true
);
Der Code im folgenden Beispiel ruft die Prozedur add_hundred
über eine storedProcedure
-Methode der Klasse com.snowflake.snowpark_java.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();