Compartir a través de


CREATE FUNCTION (Externa)

Se aplica a: casilla marcada como Sí 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.

  • function_name

    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 o UDAF en el paquete org.apache.hadoop.hive.ql.exec.
    • Debe extender AbstractGenericUDAFResolver, GenericUDF o GenericUDTF en el paquete org.apache.hadoop.hive.ql.udf.generic.
    • Debe extender UserDefinedAggregateFunction en el paquete org.apache.spark.sql.expressions.
  • 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