CREATE FUNCTION (esterno)
Si applica a: 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.-
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
oUDAF
nelorg.apache.hadoop.hive.ql.exec
pacchetto. - Deve estendere
AbstractGenericUDAFResolver
,GenericUDF
oGenericUDTF
nelorg.apache.hadoop.hive.ql.udf.generic
pacchetto. - Deve estendersi
UserDefinedAggregateFunction
nelorg.apache.spark.sql.expressions
pacchetto.
- Deve estendersi
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