CRIAR FUNÇÃO (Externa)
Aplica-se a: 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.-
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
ouUDAF
no pacoteorg.apache.hadoop.hive.ql.exec
. - Deve estender
AbstractGenericUDAFResolver
,GenericUDF
ouGenericUDTF
no pacoteorg.apache.hadoop.hive.ql.udf.generic
. - Deve estender
UserDefinedAggregateFunction
no pacoteorg.apache.spark.sql.expressions
.
- Deve estender
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