CREATE FUNCTION (esterno)

Si applica a:segno di spunta sì Databricks Runtime

Crea una funzione esterna temporanea o permanente. Le funzioni temporanee sono definite a livello di sessione in cui le funzioni permanenti vengono create nel catalogo permanente e sono rese disponibili per tutte le sessioni. Le risorse specificate nella USING clausola vengono rese disponibili a tutti gli executor quando vengono eseguiti per la prima volta.

Oltre all'interfaccia SQL, Spark consente di creare funzioni scalari e di aggregazione personalizzate definite dall'utente usando le API Scala, Python e Java. Per altre informazioni, vedere Funzioni scalari definite dall'utente esterne e Funzioni di aggregazione definite dall'utente (UDAFs).

Sintassi

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

Parametri

  • OR REPLACE

    Se specificato, le risorse per la funzione vengono ricaricate. Ciò è utile principalmente per raccogliere le modifiche apportate all'implementazione della funzione. Questo parametro si escludono IF NOT EXISTS a vicenda e non possono essere specificati insieme.

  • TEMPORARY

    Indica l'ambito della funzione da creare. Quando TEMPORARY viene specificato, la funzione creata è valida e visibile nella sessione corrente. Nessuna voce persistente viene effettuata nel catalogo per questo tipo di funzioni.

  • SE NON ESISTE

    Se specificato, crea la funzione solo quando non esiste. La creazione della funzione ha esito positivo (non viene generato alcun errore) se la funzione specificata esiste già nel sistema. Questo parametro si escludono OR REPLACE a vicenda e non possono essere specificati insieme.

  • function_name

    Nome della funzione. Il nome della funzione può essere facoltativamente qualificato con un nome di schema.

    Le funzioni create in hive_metastore possono contenere solo caratteri ASCII alfanumerici e caratteri di sottolineatura.

  • Class_name

    Nome della classe che fornisce l'implementazione della funzione da creare. La classe di implementazione deve estendere una delle classi di base come indicato di seguito:

    • Deve estendersi UDF o UDAF nel org.apache.hadoop.hive.ql.exec pacchetto.
    • Deve estendere AbstractGenericUDAFResolver, GenericUDFo GenericUDTF nel org.apache.hadoop.hive.ql.udf.generic pacchetto.
    • Deve estendersi UserDefinedAggregateFunction nel org.apache.spark.sql.expressions pacchetto.
  • resource_locations

    Elenco di risorse che contengono l'implementazione della funzione insieme alle relative dipendenze.

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

Esempi

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