Compartilhar via


CRIAR FUNÇÃO (Externa)

Aplica-se a:caixa de seleção marcada Databricks Runtime

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

Além da interface SQL, o Spark permite que você crie funções de agregação e escalares personalizadas definidas pelo usuário usando as APIs de Scala, Python e Java. Consulte as Funções escalares definidas pelo usuário (UDFs) e as Funções de agregação 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

  • OR REPLACE

    Se especificado, os recursos da função serão recarregados. Isso é útil principalmente para escolher as alterações feitas na implementação da função. Esse parâmetro é mutuamente exclusivo para IF NOT EXISTS e não pode ser especificado junto.

  • TEMPORARY

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

  • IF NOT EXISTS

    Se especificado, cria a função somente quando ela não existir. A criação da função terá êxito (não gerará erro) se a função especificada já existir no sistema. Esse parâmetro é mutuamente exclusivo para OR REPLACE e não pode ser especificado junto.

  • function_name

    Nome da função. O nome da função pode ser opcionalmente qualificado com um nome do 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 da função a ser criada. A classe de implementação deve estender uma das classes base da seguinte maneira:

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

    A lista de recursos que contêm a implementação da função junto 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