CREATE FUNCTION (Externa)
Se aplica a: Databricks Runtime
Crea una función externa temporal o permanente. El ámbito de las funciones temporales está al nivel de sesión donde las funciones permanentes se crean en el catálogo persistente y están disponibles para todas las sesiones.
Los recursos especificados en la cláusula USING
están disponibles para todos los ejecutores cuando se ejecutan por primera vez.
Además de la interfaz SQL, Spark permite crear funciones escalares y agregadas personalizadas definidas mediante las API de Scala, Python y Java. Consulte Funciones escalares definidas por el usuario externo (UDF) y Funciones de agregado definidas por el usuario (UDAF) para obtener más información.
Sintaxis
CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]
function_name AS class_name [ resource_locations ]
Parámetros
OR REPLACE
Si se especifica, se vuelven a cargar los recursos de la función. Esto es útil principalmente para recoger los cambios realizados en la implementación de la función. Este parámetro y
IF NOT EXISTS
se excluyen mutuamente, por lo que no se pueden especificar juntos.TEMPORARY
Indica el ámbito de la función que se está creando. Cuando se especifica
TEMPORARY
, la función creada es válida y visible en la sesión actual. No se realiza ninguna entrada persistente en el catálogo para este tipo de funciones.IF NOT EXISTS
Si se especifica, crea la función solo cuando no existe. La función se crea correctamente (no se produce ningún error) si la función especificada ya existe en el sistema. Este parámetro y
OR REPLACE
se excluyen mutuamente, por lo que no se pueden especificar juntos.-
Nombre de la función. El nombre de la función puede calificarse opcionalmente con un nombre de esquema.
Las funciones creadas en
hive_metastore
solo pueden contener caracteres ASCII alfanuméricos y caracteres de subrayado. class_name
Nombre de la clase que proporciona la implementación de la función que se va a crear. La clase implementada debe extender una de las clases base de la siguiente manera:
- Debe extender
UDF
oUDAF
en el paqueteorg.apache.hadoop.hive.ql.exec
. - Debe extender
AbstractGenericUDAFResolver
,GenericUDF
oGenericUDTF
en el paqueteorg.apache.hadoop.hive.ql.udf.generic
. - Debe extender
UserDefinedAggregateFunction
en el paqueteorg.apache.spark.sql.expressions
.
- Debe extender
resource_locations
Lista de recursos que contienen la implementación de la función junto con sus dependencias.
Sintaxis:
USING { { (JAR | FILE | ARCHIVE) resource_uri } , ... }
Ejemplos
-- 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