Share via


CREATE FUNCTION (extern)

Van toepassing op:vinkje als ja aan Databricks Runtime

Hiermee maakt u een tijdelijke of permanente externe functie. Tijdelijke functies zijn gericht op sessieniveau waarbij permanente functies worden gemaakt in de permanente catalogus en beschikbaar worden gesteld voor alle sessies. De resources die in de USING component zijn opgegeven, worden beschikbaar gesteld aan alle uitvoerders wanneer ze voor het eerst worden uitgevoerd.

Naast de SQL-interface kunt u met Spark aangepaste door de gebruiker gedefinieerde scalaire en statistische functies maken met behulp van Scala-, Python- en Java-API's. Zie Door de gebruiker gedefinieerde scalaire functies (UDF's) en door de gebruiker gedefinieerde statistische functies (UDAF's) voor meer informatie.

Syntaxis

CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]
    function_name AS class_name [ resource_locations ]

Parameters

  • OF VERVANGEN

    Indien opgegeven, worden de resources voor de functie opnieuw geladen. Dit is vooral handig om eventuele wijzigingen in de implementatie van de functie op te halen. Deze parameter is wederzijds exclusief IF NOT EXISTS voor en kan niet samen worden opgegeven.

  • TIJDELIJKE

    Geeft het bereik aan van de functie die wordt gemaakt. Wanneer TEMPORARY dit is opgegeven, is de gemaakte functie geldig en zichtbaar in de huidige sessie. Er wordt geen permanente vermelding gemaakt in de catalogus voor dit soort functies.

  • ALS DEZE NIET BESTAAT

    Indien opgegeven, wordt de functie alleen gemaakt wanneer deze niet bestaat. Het maken van de functie slaagt (er wordt geen fout opgetreden) als de opgegeven functie al bestaat in het systeem. Deze parameter is wederzijds exclusief OR REPLACE voor en kan niet samen worden opgegeven.

  • function_name

    Een naam voor de functie. De functienaam kan eventueel worden gekwalificeerd met een schemanaam.

    Functies die zijn gemaakt in hive_metastore kunnen alleen alfanumerieke ASCII-tekens en onderstrepingstekens bevatten.

  • class_name

    De naam van de klasse die de implementatie voor de functie biedt die moet worden gemaakt. De implementatieklasse moet als volgt een van de basisklassen uitbreiden:

    • Moet worden uitgebreid of UDAF in org.apache.hadoop.hive.ql.exec het pakket worden opgenomenUDF.
    • Moet worden uitgebreid AbstractGenericUDAFResolver, GenericUDFof GenericUDTF in org.apache.hadoop.hive.ql.udf.generic pakket.
    • Moet in org.apache.spark.sql.expressions pakket worden uitgebreidUserDefinedAggregateFunction.
  • resource_locations

    De lijst met resources die de implementatie van de functie samen met de bijbehorende afhankelijkheden bevatten.

    Syntaxis:USING { { (JAR | FILE | ARCHIVE) resource_uri } , ... }

Voorbeelden

-- 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