CREATE FUNCTION (externe)
S’applique à : Databricks Runtime
Crée une fonction externe temporaire ou permanente. Les fonctions temporaires sont étendues au niveau de la session, tandis que les fonctions permanentes sont créées dans le catalogue persistant et mises à la disposition de toutes les sessions.
Les ressources spécifiées dans la clause USING
sont mises à la disposition de tous les exécutants lorsqu'ils sont exécutés pour la première fois.
En plus de l'interface SQL, Spark vous permet de créer des fonctions scalaires et agrégées personnalisées définies par l'utilisateur à l'aide des API Scala, Python et Java. Consulter Fonctions scalaires définies par l’utilisateur externe (UDF) et Fonctions d’agrégation définies par l’utilisateur (UDAF) pour plus d'informations.
Syntaxe
CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]
function_name AS class_name [ resource_locations ]
Paramètres
OR REPLACE
Si cette fonction est spécifiée, les ressources de la fonction sont rechargées. Cela est surtout utile pour récupérer les modifications apportées à l’implémentation de la fonction. Ce paramètre est mutuellement exclusif à
IF NOT EXISTS
et ils ne peuvent être spécifiés ensemble.TEMPORARY
Indique l’étendue de la fonction en cours de création. Lorsque vous spécifiez
TEMPORARY
, la fonction créée est valide et visible dans la session active. Aucune entrée persistante n’est transmise dans le catalogue pour ces types de fonctions.IF NOT EXISTS
S’il est spécifié, crée la fonction uniquement lorsqu’elle n’existe pas. La création de la fonction réussit (aucune erreur n'est signalée) si la fonction spécifiée existe déjà dans le système. Ce paramètre est mutuellement exclusif à
OR REPLACE
et ils ne peuvent être spécifiés ensemble.-
Nom de la fonction. Le nom de la fonction peut facultativement être qualifié avec un nom de schéma.
Les fonctions créées dans
hive_metastore
peuvent uniquement contenir des caractères ASCII alphanumériques et des traits de soulignement. class_name
Nom de la classe qui fournit l’implémentation pour la fonction à créer. La classe d’implémentation doit étendre l’une des classes de base comme suit :
- Doit étendre
UDF
ouUDAF
dans le packageorg.apache.hadoop.hive.ql.exec
. - Doit étendre
AbstractGenericUDAFResolver
,GenericUDF
, ouGenericUDTF
dans le packageorg.apache.hadoop.hive.ql.udf.generic
. - Doit étendre
UserDefinedAggregateFunction
dans le packageorg.apache.spark.sql.expressions
.
- Doit étendre
resource_locations
Liste des ressources qui contiennent l’implémentation de la fonction, ainsi que ses dépendances.
Syntaxe :
USING { { (JAR | FILE | ARCHIVE) resource_uri } , ... }
Exemples
-- 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