Erstellen einer UDF

Eine benutzerdefinierte Funktion (UDF) bzw. eine benutzerdefinierte Tabellenfunktion (UDTF) wird mit einem CREATE FUNCTION-Befehl erstellt, der die Eigenschaften der Funktion festlegt, einschließlich des für deren Logik zu verwendenden Handlers.

Unter diesem Thema sind die Schritte zum Erstellen einer UDF aufgeführt. Beispiele dazu finden Sie in der Referenz zu CREATE FUNCTION.

Verwenden der CREATE FUNCTION-Anweisung zum Verknüpfen der Handler-Methode mit dem UDF-Namen

Zum Erstellen einer UDF müssen Sie die folgenden Schritte ausführen:

  1. Schreiben Sie den Handler-Code, der bei Aufruf der UDF ausgeführt werden soll.

    Sie können eine der unterstützten Handler-Sprachen verwenden. Weitere Informationen dazu finden Sie unter Unterstützte Sprachen.

  2. Legen Sie fest, ob Sie den Handler-Code inline in der SQL-Anweisung CREATE FUNCTION verwenden möchten oder auf den Handler-Code in einem Stagingbereich verweisen möchten.

    Beide Methoden haben Vor- und Nachteile. Weitere Informationen dazu finden Sie unter Speichern von Handler-Code inline oder in einem Stagingbereich.

  3. Führen Sie eine CREATE FUNCTION-Anweisung in SQL aus, und geben Sie dabei die Eigenschaften der Funktion an.

    Der Code im folgenden Beispiel erstellt eine UDF namens function_name mit dem Inline-Handler HandlerClass.handlerMethod.

    create function function_name(x integer, y integer)
      returns integer
      language java
      handler='HandlerClass.handlerMethod'
      target_path='@~/HandlerCode.jar'
      as
      $$
          class HandlerClass {
              public static int handlerMethod(int x, int y) {
                return x + y;
              }
          }
      $$;
    
    Copy

    Im Folgenden werden einige der Eigenschaften beschrieben, die beim Erstellen einer Funktion erforderlich sind oder üblicherweise verwendet werden.

    • Funktionsname.

      Der UDF-Name muss nicht mit dem Namen der in Java geschriebenen Handler-Methode übereinstimmen. Die CREATE FUNCTION-Anweisung verknüpft den UDF-Namen mit dem Handler.

      Für weitere Informationen zu Einschränkungen und Konventionen bei der Namensvergabe finden Sie unter Benennen und Überladen von Prozeduren und UDFs.

    • Funktionsargumente, falls vorhanden.

      Siehe Definieren von Argumenten für UDFs und gespeicherte Prozeduren.

    • Rückgabetyp mit der RETURNS-Klausel.

      Bei einem skalaren Rückgabewert gibt die RETURNS-Klausel einen einzelnen Rückgabetyp an. Bei einem tabellarischen Rückgabewert gibt RETURNS das Schlüsselwort TABLE an, das den Spaltentyp im tabellarischen Rückgabewert angibt.

      Weitere Informationen zum Zuordnen von SQL-Datentypen zu Handler-Datentypen in Snowflake finden Sie unter Benennen und Überladen von Prozeduren und UDFs.

    • Handler-Name mit der HANDLER-Klausel.

      Falls erforderlich, ist dies der Name der Klasse oder Methode, die den Code enthält, der bei Aufruf der UDF ausgeführt wird. Die Angabe eines Handler-Namens ist nur für Handler erforderlich, die in Java und Python geschrieben wurden. Bei JavaScript- und SQL-Handlern wird der gesamte Inline-Code als Handler ausgeführt.

      In der folgenden Tabelle wird gezeigt, welche Form der Wert der HANDLER-Klausel in Abhängigkeit von der Handler-Sprache und dem Funktionstyp annimmt.

      Sprache des Handlers

      UDF

      UDTF

      Java

      Klassen- und Methodenname.

      Beispiel: MyClass.myMethod

      Nur Klassenname. Der Name der Handler-Methode wird durch die erforderliche Schnittstelle vorgegeben.

      JavaScript

      Keine.

      Keine.

      Python

      Klassen- und Methodenname bei Verwendung einer Klasse, ansonsten Funktionsname.

      Beispiel: module.my_function oder my_function

      Nur Klassenname. Der Name der Handler-Methode wird durch die erforderliche Schnittstelle vorgegeben.

      SQL

      Keine.

      Keine.

    • Vom Handler benötigte Abhängigkeiten, falls vorhanden, unter Verwendung der IMPORTS- oder PACKAGES-Klausel.

      Weitere Informationen zur Bereitstellung der Abhängigkeiten für den Handler finden Sie unter Abhängigkeiten für Code zur Verfügung stellen.

    • Laufzeitumgebung der Handler-Sprache mit Klausel RUNTIME_VERSION.

      Wenn die Handler-Sprache Java oder Python ist, verwenden Sie die RUNTIME_VERSION-Klausel, um anzugeben, welche unterstützte Laufzeitversion verwendet werden soll. Wenn Sie die Klausel weglassen, verwendet Snowflake die Standardeinstellung, die sich in Zukunft ändern kann.