CREATE-FUNKTION (extern)

Gäller för:markerad ja Databricks Runtime

Skapar en tillfällig eller permanent extern funktion. Tillfälliga funktioner är begränsade på sessionsnivå där permanenta funktioner skapas i den beständiga katalogen och görs tillgängliga för alla sessioner. De resurser som anges i USING -satsen görs tillgängliga för alla utförare när de körs för första gången.

Utöver SQL-gränssnittet kan du med Spark skapa anpassade användardefinierade skalära och aggregerade funktioner med hjälp av Scala-, Python- och Java-API:er. Mer information finns i Externa användardefinierade skalärfunktioner (UDF: er) och användardefinierade aggregeringsfunktioner (UDAF:er).

Syntax

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

Parametrar

  • ELLER ERSÄTT

    Om det anges läses resurserna för funktionen in igen. Detta är främst användbart för att hämta eventuella ändringar som gjorts i implementeringen av funktionen. Den här parametern är ömsesidigt uteslutande för IF NOT EXISTS och kan inte anges tillsammans.

  • TILLFÄLLIGA

    Anger omfånget för funktionen som skapas. När TEMPORARY har angetts är den skapade funktionen giltig och synlig i den aktuella sessionen. Ingen beständig post görs i katalogen för den här typen av funktioner.

  • OM INTE FINNS

    Om det anges skapar funktionen endast när den inte finns. Det går att skapa funktionen (inget fel utlöses) om den angivna funktionen redan finns i systemet. Den här parametern är ömsesidigt uteslutande för OR REPLACE och kan inte anges tillsammans.

  • function_name

    Ett namn på funktionen. Funktionsnamnet kan vara valfritt kvalificerat med ett schemanamn.

    Funktioner som skapas i hive_metastore kan bara innehålla alfanumeriska ASCII-tecken och understreck.

  • class_name

    Namnet på klassen som tillhandahåller implementeringen för funktionen som ska skapas. Implementeringsklassen bör utöka en av basklasserna enligt följande:

    • Bör utöka UDF eller UDAF i org.apache.hadoop.hive.ql.exec paket.
    • Bör utöka AbstractGenericUDAFResolver, GenericUDFeller GenericUDTF i org.apache.hadoop.hive.ql.udf.generic paket.
    • Bör utökas UserDefinedAggregateFunction i org.apache.spark.sql.expressions paketet.
  • resource_locations

    Listan över resurser som innehåller implementeringen av funktionen tillsammans med dess beroenden.

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

Exempel

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