CREATE FUNCTION (Externo)
Aplica-se a: 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.-
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
ouUDAF
emorg.apache.hadoop.hive.ql.exec
pacote. - Deve estender
AbstractGenericUDAFResolver
,GenericUDF
, ouGenericUDTF
noorg.apache.hadoop.hive.ql.udf.generic
pacote. - Deve ser estendido
UserDefinedAggregateFunction
noorg.apache.spark.sql.expressions
pacote.
- Deve estender
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