CREATE FUNCTION (externí)

Platí pro:zaškrtnutí označeného ano Databricks Runtime

Vytvoří dočasnou nebo trvalou externí funkci. Dočasné funkce jsou vymezeny na úrovni relace, kde se v trvalém katalogu vytvářejí trvalé funkce a jsou k dispozici pro všechny relace. Prostředky zadané v USING klauzuli jsou zpřístupněny všem exekutorům při prvním spuštění.

Kromě rozhraní SQL umožňuje Spark vytvářet vlastní skalární a agregační funkce definované uživatelem pomocí rozhraní Scala, Python a Java API. Další informace najdete v tématech Externí uživatelem definované skalární funkce (UDF) a Uživatelem definované agregační funkce (UDAF).

Syntaxe

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

Parametry

  • NEBO NAHRADIT

    Pokud je zadáno, prostředky funkce se znovu načtou. To je užitečné hlavně k vyzvednutí všech změn provedených v implementaci funkce. Tento parametr se vzájemně vylučují IF NOT EXISTS a nelze ho zadat společně.

  • DOČASNÉ

    Označuje rozsah vytvářené funkce. Po TEMPORARY zadání je vytvořená funkce platná a viditelná v aktuální relaci. V katalogu se pro tento druh funkcí nevytvářila žádná trvalá položka.

  • POKUD NEEXISTUJE

    Pokud je zadáno, vytvoří funkci pouze v případě, že neexistuje. Vytvoření funkce proběhne úspěšně (není vyvolán žádná chyba), pokud zadaná funkce již v systému existuje. Tento parametr se vzájemně vylučují OR REPLACE a nelze ho zadat společně.

  • function_name

    Název funkce. Název funkce může být volitelně kvalifikovaný s názvem schématu.

    Funkce vytvořené v hive_metastore sadě MŮŽOU obsahovat pouze alfanumerické znaky a podtržítka ASCII.

  • class_name

    Název třídy, která poskytuje implementaci funkce, která se má vytvořit. Implementovat třídu by měla rozšířit jednu ze základních tříd následujícím způsobem:

    • Měla by být rozšířena UDF nebo UDAF v org.apache.hadoop.hive.ql.exec balíčku.
    • Měla by být rozšířena AbstractGenericUDAFResolverGenericUDF, nebo GenericUDTF v org.apache.hadoop.hive.ql.udf.generic balíčku.
    • Měl by být rozšířen UserDefinedAggregateFunction v org.apache.spark.sql.expressions balíčku.
  • resource_locations

    Seznam prostředků, které obsahují implementaci funkce spolu s jeho závislostmi.

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

Příklady

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