Freigeben über


CREATE FUNCTION (Extern)

Gilt für: Häkchen Databricks Runtime

Erstellt eine temporäre oder permanente externe Funktion. Temporäre Funktionen sind auf die Sitzungsebene begrenzt, während permanente Funktionen im persistenten Katalog erstellt werden und für alle Sitzungen verfügbar sind. Die in der USING-Klausel angegebenen Ressourcen werden allen Executors zur Verfügung gestellt, wenn sie zum ersten Mal ausgeführt werden.

Zusätzlich zur SQL-Schnittstelle können Sie mit Spark benutzerdefinierte Skalar- und Aggregatfunktionen über Scala-, Python- und Java-APIs erstellen. Weitere Informationen finden Sie unter Externe benutzerdefinierte Skalarfunktionen (UDFs) und Benutzerdefinierte Aggregatfunktionen (User-Defined Aggregate Functions, UDAFs).

Syntax

CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]
    function_name AS class_name [ resource_locations ]

Parameter

  • OR REPLACE

    Falls angegeben, werden die Ressourcen für die Funktion erneut geladen. Dies ist vor allem nützlich, um Änderungen an der Implementierung der Funktion zu berücksichtigen. Dieser Parameter und IF NOT EXISTS schließen sich gegenseitig aus und können nicht zusammen angegeben werden.

  • TEMPORARY

    Gibt den Bereich der Funktion an, die erstellt wird. Wenn Sie TEMPORARY angeben, ist die erstellte Funktion gültig und in der aktuellen Sitzung sichtbar. Für diese Art von Funktionen erfolgt kein persistenter Eintrag im Katalog.

  • IF NOT EXISTS

    Falls angegeben, wird die Funktion nur erstellt, wenn sie nicht vorhanden ist. Die Erstellung der Funktion ist erfolgreich (es wird kein Fehler ausgelöst), wenn die angegebene Funktion bereits im System vorhanden ist. Dieser Parameter und OR REPLACE schließen sich gegenseitig aus und können nicht zusammen angegeben werden.

  • function_name

    Ein Name für die Funktion. Der Funktionsname kann optional mit einem Schemanamen qualifiziert werden.

    In hive_metastore erstellte Funktionen dürfen nur alphanumerische ASCII-Zeichen und Unterstriche enthalten.

  • class_name

    Der Name der Klasse, die die Implementierung der zu erstellenden Funktion bereitstellt. Die implementierende Klasse muss eine der Basisklassen wie folgt erweitern:

    • Muss UDF oder UDAF im Paket org.apache.hadoop.hive.ql.exec erweitern.
    • Muss AbstractGenericUDAFResolver, GenericUDF oder GenericUDTF im Paket org.apache.hadoop.hive.ql.udf.generic erweitern.
    • Muss UserDefinedAggregateFunction im Paket org.apache.spark.sql.expressions erweitern.
  • resource_locations

    Die Liste der Ressourcen, die die Implementierung der Funktion sowie deren Abhängigkeiten enthalten.

    Syntax: USING { { (JAR | FILE | ARCHIVE) resource_uri } , ... }

Beispiele

-- 1. Create a simple UDF `SimpleUdf` that increments the supplied integral value by 10.
--    import org.apache.hadoop.hive.ql.exec.UDF;
--    public class SimpleUdf extends UDF {
--      public int evaluate(int value) {
--        return value + 10;
--      }
--    }
-- 2. Compile and place it in a JAR file called `SimpleUdf.jar` in /tmp.

-- Create a table called `test` and insert two rows.
> CREATE TABLE test(c1 INT);
> INSERT INTO test VALUES (1), (2);

-- Create a permanent function called `simple_udf`.
> CREATE FUNCTION simple_udf AS 'SimpleUdf'
    USING JAR '/tmp/SimpleUdf.jar';

-- Verify that the function is in the registry.
> SHOW USER FUNCTIONS;
           function
 ------------------
 default.simple_udf

-- Invoke the function. Every selected value should be incremented by 10.
> SELECT simple_udf(c1) AS function_return_value FROM t1;
 function_return_value
 ---------------------
                    11
                    12

-- Created a temporary function.
> CREATE TEMPORARY FUNCTION simple_temp_udf AS 'SimpleUdf'
    USING JAR '/tmp/SimpleUdf.jar';

-- Verify that the newly created temporary function is in the registry.
-- The temporary function does not have a qualified
-- schema associated with it.
> SHOW USER FUNCTIONS;
           function
 ------------------
 default.simple_udf
    simple_temp_udf

-- 1. Modify `SimpleUdf`'s implementation to add supplied integral value by 20.
--    import org.apache.hadoop.hive.ql.exec.UDF;

--    public class SimpleUdfR extends UDF {
--      public int evaluate(int value) {
--        return value + 20;
--      }
--    }
-- 2. Compile and place it in a jar file called `SimpleUdfR.jar` in /tmp.

-- Replace the implementation of `simple_udf`
> CREATE OR REPLACE FUNCTION simple_udf AS 'SimpleUdfR'
    USING JAR '/tmp/SimpleUdfR.jar';

-- Invoke the function. Every selected value should be incremented by 20.
> SELECT simple_udf(c1) AS function_return_value FROM t1;
 function_return_value
 ---------------------
                    21
                    22