Einführung in Scala-UDFs¶
Sie können den Handler für eine benutzerdefinierte Funktion (UDF) in Scala schreiben. Ein Handler wird als Logik der Funktion ausgeführt, wenn diese in SQL aufgerufen wird.
Snowflake unterstützt derzeit das Schreiben von UDFs mit den folgenden Scala-Versionen:
2.12
Sobald der Handler verfügbar ist, erstellen Sie die UDF mit SQL. Weitere Informationen zur Verwendung von SQL für das Erstellen oder Aufrufen einer UDF finden Sie unter Erstellen einer UDF bzw. Aufrufen einer UDF.
Eine Einführung in UDFs, einschließlich einer Liste der Sprachen, in denen Sie einen UDF-Handler schreiben können, finden Sie unter Übersicht zu benutzerdefinierten Funktionen.
Bemerkung
Informationen zu Einschränkungen bezüglich Scala-Handlern finden Sie unter Scala-UDF-Einschränkungen.
Sie können auch Scala verwenden, um ein UDF zu schreiben, wenn Sie die Snowpark-API verwenden. Weitere Informationen dazu finden Sie unter Erstellen von benutzerdefinierten Funktionen (UDFs) für DataFrames in Scala.
Funktionsweise eines Handlers¶
Wenn ein Benutzer eine UDF aufruft, übergibt der Benutzer den Namen und die Argumente der UDF an Snowflake. Snowflake ruft die mit der UDF verbundene Handler-Methode auf, um die Logik der UDFauszuführen. Die Handler-Methode gibt dann die Ausgabe an Snowflake zurück, und Snowflake gibt die Ausgabe an den Client zurückgibt.
Bei einer skalaren Funktion (gibt einen einzelnen Wert zurück) gibt die UDF einen einzelnen Wert für jede an die UDF übergebene Zeile zurück.
Um die Logik Ihres Handlers zu unterstützen, kann Ihr Code auch Bibliotheken verwenden, die extern zum Handler sind. Wenn Sie z. B. bereits Datenanalysecode in Scala haben, können Sie diesen wahrscheinlich von Ihrem Handler-Code aus verwenden.
Allgemeine Informationen zum Schreiben eines Handlers in Scala finden Sie unter Allgemeine Richtlinien zum Codieren von Scala-UDF-Handlern. Weitere Informationen zum Schreiben einer skalaren Funktion finden Sie unter Schreiben einer skalaren UDF in Scala.
Beispiel¶
Der Code im folgenden Beispiel erstellt eine UDF namens echo_varchar
mit der Handler-Methode TestFunc.echoVarchar
. Die Scala-Argumente und -Rückgabetypen werden von Snowflake gemäß den unter Zuordnung von Datentypen zwischen SQL und Scala beschriebenen Zuordnungen in und aus SQL konvertiert.
CREATE OR REPLACE FUNCTION echo_varchar(x VARCHAR)
RETURNS VARCHAR
LANGUAGE SCALA
RUNTIME_VERSION = 2.12
HANDLER='TestFunc.echoVarchar'
AS
$$
class TestFunc {
def echoVarchar(x : String): String = {
return x
}
}
$$;
Aufrufen der UDF¶
SELECT echo_varchar('Hello');
Hinweise zum Entwurf¶
Beachten Sie beim Entwerfen eines effizienten Handlers die folgenden Hinweise.
Allgemeine Überlegungen. Allgemeine Hinweise zu UDFs und Prozeduren finden Sie unter Richtlinien und Einschränkungen beim Entwurf von Funktionen und Prozeduren.
Berücksichtigung Snowflake-bedingter Einschränkungen. Informationen zum Entwerfen von Handler-Code, der unter Snowflake effizient ausgeführt wird, finden Sie unter Entwerfen von Handlern unter Berücksichtigung der Snowflake-bedingten Einschränkungen.
SQL-Scala-Typzuordnung. Beim Austausch von Argumenten und Rückgabewerten mit einer UDF konvertiert Snowflake zwischen der Handler-Sprache und SQL. Weitere Informationen zur Auswahl von Datentypen für Ihren Handler-Code finden Sie unter Zuordnung von Datentypen zwischen SQL und Scala.
Code-Pakete. Sie können Ihren Handler-Code entweder inline mit der CREATE FUNCTION-Anweisung oder in einem Stagingbereich in einer JAR-Datei als kompilierten Code zur Verfügung stellen. Weitere Informationen zu den Unterschieden zwischen den beiden Methoden finden Sie unter Speichern von Handler-Code inline oder in einem Stagingbereich.
Weitere Informationen zur Verwendung von sbt zum Packen des kompilierten Codes Ihres Scala-Handlers finden Sie unter Packen von Scala-Handler-Code mit sbt.
Code-Optimierung. Informationen zur Optimierung Ihres Handler-Codes, z. B. wenn der Code zeilenübergreifende Zustände verarbeitet, finden Sie unter Steuerung des globalen Zustands in skalaren Scala-UDFs.
Best Practices. Informationen zu bewährten Methoden finden Sie unter Best Practices und Sicherheitsverfahren für UDFs und Prozeduren.
Codieren von Handlern¶
Unter den folgenden Themen wird von den Grundlagen bis zu detaillierten Beispielen das Schreiben eines UDF-Handlers in Scala erläutert.
Allgemeine Richtlinien. Allgemeine Informationen zum Codieren von Handlern, einschließlich der Behandlung von Fehlern, der Auswahl von Datentypen und mehr, finden Sie unter Allgemeine Richtlinien zum Codieren von Scala-UDF-Handlern.
Schreiben einer skalaren Funktion Weitere Informationen dazu finden Sie unter Schreiben einer skalaren UDF in Scala.
Protokollierung und Ereignisablaufverfolgung. Informationen zum Erfassen von Protokoll- und Ablaufverfolgungsdaten während der Ausführung Ihres Handler-Codes finden Sie unter Übersicht zu Protokollierung und Ablaufverfolgung.
Codebeispiele Zahlreiche Beispiele für Handler finden Sie unter Beispiele für Scala-UDF-Handler.
Abhängigkeiten. Sie können Ihrem Code zur Laufzeit Abhängigkeiten zur Verfügung stellen, indem Sie diese in einen Stagingbereich hochladen. Weitere Informationen dazu finden Sie unter Abhängigkeiten für Code zur Verfügung stellen.
Organisation von Handler-Dateien. Wenn Sie beabsichtigen, kompilierten Handler-Code in eine JAR-Datei in einem Stagingbereich zu packen, organisieren und erstellen Sie Ihren Code mithilfe der unter Scala-UDF-Handler – Projekt und Paketerstellung bereitgestellten Vorschläge.