CREATE FUNCTION (extern)
Van toepassing op: 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.TIJDELIJK
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.-
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
inorg.apache.hadoop.hive.ql.exec
het pakket worden opgenomenUDF
. - Moet worden uitgebreid
AbstractGenericUDAFResolver
,GenericUDF
ofGenericUDTF
inorg.apache.hadoop.hive.ql.udf.generic
pakket. - Moet in
org.apache.spark.sql.expressions
pakket worden uitgebreidUserDefinedAggregateFunction
.
- Moet worden uitgebreid of
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