CREATE FUNCTION (externe)

S’applique à :coche marquée oui 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.

  • function_name

    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 ou UDAF dans le package org.apache.hadoop.hive.ql.exec.
    • Doit étendre AbstractGenericUDAFResolver, GenericUDF, ou GenericUDTF dans le package org.apache.hadoop.hive.ql.udf.generic.
    • Doit étendre UserDefinedAggregateFunction dans le package org.apache.spark.sql.expressions.
  • 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