Partilhar via


CREATE FUNCTION (Externo)

Aplica-se a: Marque Sim Databricks Runtime

Cria uma função externa temporária ou permanente. As funções temporárias têm um escopo em um nível de sessão onde as funções permanentes são criadas no catálogo persistente e disponibilizadas para todas as sessões. Os recursos especificados na USING cláusula são disponibilizados a todos os executores quando são executados pela primeira vez.

Além da interface SQL, o Spark permite que você crie funções escalares e agregadas personalizadas definidas pelo usuário usando APIs Scala, Python e Java. Consulte Funções escalares definidas pelo usuário externo (UDFs) e Funções agregadas definidas pelo usuário (UDAFs) para obter mais informações.

Sintaxe

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

Parâmetros

  • OU SUBSTITUIR

    Se especificado, os recursos para a função são recarregados. Isso é útil principalmente para pegar quaisquer alterações feitas na implementação da função. Este parâmetro é mutuamente exclusivo IF NOT EXISTS e não pode ser especificado em conjunto.

  • TEMPORÁRIO

    Indica o escopo da função que está sendo criada. Quando TEMPORARY é especificada, a função criada é válida e visível na sessão atual. Nenhuma entrada persistente é feita no catálogo para este tipo de funções.

  • SE NÃO EXISTIR

    Se especificado, cria a função somente quando ela não existe. A criação da função é bem-sucedida (nenhum erro é lançado) se a função especificada já existir no sistema. Este parâmetro é mutuamente exclusivo OR REPLACE e não pode ser especificado em conjunto.

  • function_name

    Um nome para a função. O nome da função pode ser opcionalmente qualificado com um nome de esquema.

    As funções criadas em hive_metastore só podem conter caracteres ASCII alfanuméricos e sublinhados.

  • class_name

    O nome da classe que fornece a implementação para a função a ser criada. A classe de implementação deve estender uma das classes base da seguinte maneira:

    • Deve estender UDF ou UDAF em org.apache.hadoop.hive.ql.exec pacote.
    • Deve estender AbstractGenericUDAFResolver, GenericUDF, ou GenericUDTF no org.apache.hadoop.hive.ql.udf.generic pacote.
    • Deve ser estendido UserDefinedAggregateFunction no org.apache.spark.sql.expressions pacote.
  • resource_locations

    A lista de recursos que contêm a implementação da função juntamente com suas dependências.

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

Exemplos

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