Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
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 vykonavatelům při jejich 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).
Poznámka:
Externí funkce nelze vytvořit v katalogu Unity.
Syntaxe
CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]
function_name AS class_name [ resource_locations ]
Parametry
NEBO NAHRAĎ
Pokud je zadáno, prostředky funkce se znovu načtou. To je hlavně užitečné k zachycení všech změn provedených v implementaci funkce. Tento parametr se vzájemně vylučuje s
IF NOT EXISTSa nelze ho zadat současně.DOČASNÝ
Označuje rozsah vytvářené funkce. Vytvořená funkce je po zadání
TEMPORARYplatná 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ána žádná chyba), pokud zadaná funkce již v systému existuje. Tento parametr se vzájemně vylučuje s
OR REPLACEa nelze ho zadat současně.-
Název funkce. Název funkce může být volitelně upřesněn názvem schématu.
Funkce vytvořené v
hive_metastoresadě 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. Implementující třída by měla dědit z jedné ze základních tříd následujícím způsobem:
- Měla by být rozšířena
UDFneboUDAFvorg.apache.hadoop.hive.ql.execbalíčku. - Mělo by se rozšířit
AbstractGenericUDAFResolver,GenericUDFneboGenericUDTFv balíčkuorg.apache.hadoop.hive.ql.udf.generic. - Mělo by být rozšířeno
UserDefinedAggregateFunctionv balíčkuorg.apache.spark.sql.expressions.
- Měla by být rozšířena
resource_locations
Seznam prostředků, které obsahují implementaci funkce spolu s jeho závislostmi.
Syntax:
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