Aufrufen von Funktionen und gespeicherten Prozeduren in Snowpark-Java¶
Zur Verarbeitung von Daten in einem DataFrame können Sie systemdefinierte SQL-Funktionen, benutzerdefinierte Funktionen und gespeicherte Prozeduren aufrufen. Unter diesem Thema wird erklärt, wie Sie diese Funktionen in Snowpark aufrufen können.
Unter diesem Thema:
Aufrufen von systemdefinierten Funktionen¶
Wenn Sie systemdefinierte SQL-Funktionen aufrufen möchten, müssen Sie die entsprechenden statischen Methoden der Functions-Klasse verwenden.
Im folgenden Beispiel wird die statische Methode upper
der Functions
-Klasse (das Äquivalent zur systemdefinierten Funktion UPPER) aufgerufen, um die Werte in der Namensspalte mit Großbuchstaben zurückzugeben:
DataFrame df = session.table("sample_product_data");
df.select(Functions.upper(Functions.col("name"))).show();
Wenn in der Klasse Functions
keine systemdefinierte SQL-Funktion verfügbar ist, können Sie die statische Methode Functions.callUDF
verwenden, um die systemdefinierte Funktion aufzurufen.
Für callUDF
übergeben Sie den Namen der systemdefinierten Funktion als erstes Argument. Wenn Sie die Werte von Spalten an die systemdefinierte Funktion übergeben müssen, definieren Sie Column-Objekte und übergeben diese als zusätzliche Argumente an die callUDF
-Funktion.
Im folgenden Beispiel wird die systemdefinierte Funktion RADIANS aufgerufen, die den Wert aus der Spalte degrees
übergibt:
// Call the system-defined function RADIANS() on degrees.
DataFrame dfDegrees = session.range(0, 360, 45).rename("degrees", Functions.col("id"));
dfDegrees.select(Functions.col("degrees"), Functions.callUDF("radians", Functions.col("degrees"))).show();
Die Funktion callUDF
gibt einen Column
-Wert zurück, den Sie an die DataFrame-Transformationsmethoden (z. B. Filtern oder Auswählen) übergeben können.
Aufrufen von skalaren benutzerdefinierten Funktionen (UDFs)¶
Die Methode zum Aufrufen einer UDF hängt davon ab, wie die UDF erstellt wurde:
Um eine anonyme UDF aufzurufen, rufen Sie die
apply
-Methode des UserDefinedFunction-Objekts auf, das beim Erstellen der UDF zurückgegeben wurde.Die Argumente, die Sie an eine UDF übergeben, müssen Column-Objekte sein. Wenn Sie ein Literal übergeben müssen, verwenden Sie
Functions.lit()
, wie unter Verwenden von Literalen als Spaltenobjekte erklärt.Zum Aufrufen von UDFs, die Sie mit Namen registriert haben, und von UDFs, die Sie durch Ausführen von CREATE FUNCTION erstellt haben, verwenden Sie die statische Methode
Functions.callUDF
.Übergeben Sie den Namen der UDF als erstes Argument und alle UDF-Parameter als weitere Argumente.
Der Aufruf einer UDF gibt ein Column
-Objekt zurück, das den Rückgabewert der UDF enthält.
Im folgenden Beispiel wird die UDF-Funktion doubleUdf
aufgerufen, wobei der Wert aus der Spalte quantity
übergeben werden. Im Beispiel wird der Rückgabewert von doubleUdf
an die Methode select
des DataFrame übergeben.
import com.snowflake.snowpark_java.types.*;
...
// Create and register a temporary named UDF
// that takes in an integer argument and returns an integer value.
UserDefinedFunction doubleUdf =
session
.udf()
.registerTemporary(
"doubleUdf",
(Integer x) -> x + x,
DataTypes.IntegerType,
DataTypes.IntegerType);
// Call the named UDF, passing in the "quantity" column.
// The example uses withColumn to return a DataFrame containing
// the UDF result in a new column named "doubleQuantity".
DataFrame df = session.table("sample_product_data");
DataFrame dfWithDoubleQuantity = df.withColumn("doubleQuantity", doubleUdf.apply(Functions.col("quantity")));
dfWithDoubleQuantity.show();
Aufrufen von Tabellenfunktionen (Systemfunktionen und UDTFs)¶
So rufen Sie eine Tabellenfunktion oder eine benutzerdefinierte Tabellenfunktion (UDTF) auf:
Erstellen Sie ein TableFunction-Objekt, und übergeben Sie den Namen der Tabellenfunktion.
Rufen Sie die tableFunction-Methode des Session-Objekts auf, und übergeben Sie das
TableFunction
-Objekt und eine Zuordnung (Map
) der Namen und Werte der Eingabeargumente.
table?Function
gibt einen DataFrame zurück, der die Ausgabe der Tabellenfunktion enthält.
Angenommen, Sie haben den folgenden Befehl ausgeführt, um einen SQL-UDTF zu erstellen:
CREATE OR REPLACE FUNCTION product_by_category_id(cat_id INT)
RETURNS TABLE(id INT, name VARCHAR)
AS
$$
SELECT id, name
FROM sample_product_data
WHERE category_id = cat_id
$$
;
Der folgende Code ruft diese UDTF auf und erstellt einen DataFrame für die Ausgabe der UDTF. Im Beispiel werden die ersten 10 Zeilen der Ausgabe auf der Konsole ausgegeben.
import java.util.HashMap;
import java.util.Map;
...
Map<String, Column> arguments = new HashMap<>();
arguments.put("cat_id", Functions.lit(10));
DataFrame dfTableFunctionOutput = session.tableFunction(new TableFunction("product_by_category_id"), arguments);
dfTableFunctionOutput.show();
Wenn Sie die Ausgabe einer Tabellenfunktion mit einem DataFrame verbinden müssen, rufen Sie die join-Methode auf, die ein TableFunction-Objekt übergibt.
Aufrufen von gespeicherten Prozeduren¶
Um eine gespeicherte Prozedur aufzurufen, verwenden Sie die Methode sql
der Klasse Session
. Siehe Ausführen von SQL-Anweisungen.