Udostępnij za pośrednictwem


CREATE, FUNKCJA (zewnętrzna)

Dotyczy: zaznacz pole wyboru oznaczone jako tak Databricks Runtime

Tworzy tymczasową lub stałą funkcję zewnętrzną. Funkcje tymczasowe są ograniczone na poziomie sesji, gdzie jako funkcje trwałe są tworzone w wykazie trwałym i są udostępniane wszystkim sesjom. Zasoby określone w klauzuli USING są udostępniane wszystkim wykonawcom podczas ich pierwszego wykonywania.

Oprócz interfejsu SQL platforma Spark umożliwia tworzenie niestandardowych funkcji skalarnych i agregujących zdefiniowanych przez użytkownika przy użyciu interfejsów API Języka Scala, Python i Java. Aby uzyskać więcej informacji, zobacz Zewnętrzne funkcje skalarne zdefiniowane przez użytkownika (UDF) i Funkcje agregujące zdefiniowane przez użytkownika (UDAFs).

Składnia

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

Parametry

  • LUB ZASTĄP

    Jeśli zostanie określony, zasoby funkcji zostaną ponownie załadowane. Jest to głównie przydatne do pobrania wszelkich zmian wprowadzonych w implementacji funkcji. Ten parametr wzajemnie się wyklucza IF NOT EXISTS i nie można go określić razem.

  • TYMCZASOWY

    Wskazuje zakres tworzonej funkcji. Po TEMPORARY określeniu utworzona funkcja jest prawidłowa i widoczna w bieżącej sesji. W wykazie nie jest wprowadzany trwały wpis dla tego rodzaju funkcji.

  • JEŚLI NIE ISTNIEJE

    Jeśli zostanie określony, tworzy funkcję tylko wtedy, gdy nie istnieje. Tworzenie funkcji powiedzie się (nie zostanie zgłoszony błąd), jeśli określona funkcja już istnieje w systemie. Ten parametr wzajemnie się wyklucza OR REPLACE i nie można go określić razem.

  • function_name

    Nazwa funkcji. Nazwa funkcji może być opcjonalnie kwalifikowana przy użyciu nazwy schematu.

    Funkcje utworzone w programie hive_metastore mogą zawierać tylko znaki alfanumeryczne ASCII i podkreślenia.

  • class_name

    Nazwa klasy, która udostępnia implementację funkcji do utworzenia. Klasa implementowania powinna rozszerzyć jedną z klas bazowych w następujący sposób:

    • Należy rozszerzyć UDF lub UDAF w org.apache.hadoop.hive.ql.exec pakiecie.
    • Należy rozszerzyć AbstractGenericUDAFResolverwartość , GenericUDFlub GenericUDTF w org.apache.hadoop.hive.ql.udf.generic pakiecie.
    • Powinien zostać rozszerzony UserDefinedAggregateFunction w org.apache.spark.sql.expressions pakiecie.
  • resource_locations

    Lista zasobów, które zawierają implementację funkcji wraz z jej zależnościami.

    Składnia: USING { { (JAR | FILE | ARCHIVE) resource_uri } , ... }

Przykłady

-- 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