CREATE FUNCTION (Extern)
Gilt für: Databricks Runtime
Erstellt eine temporäre oder permanente externe Funktion. Temporäre Funktionen sind auf die Sitzungsebene begrenzt, während permanente Funktionen im persistenten Katalog erstellt werden und für alle Sitzungen verfügbar sind.
Die in der USING
-Klausel angegebenen Ressourcen werden allen Executors zur Verfügung gestellt, wenn sie zum ersten Mal ausgeführt werden.
Zusätzlich zur SQL-Schnittstelle können Sie mit Spark benutzerdefinierte Skalar- und Aggregatfunktionen über Scala-, Python- und Java-APIs erstellen. Weitere Informationen finden Sie unter Externe benutzerdefinierte Skalarfunktionen (UDFs) und Benutzerdefinierte Aggregatfunktionen (User-Defined Aggregate Functions, UDAFs).
Syntax
CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]
function_name AS class_name [ resource_locations ]
Parameter
OR REPLACE
Falls angegeben, werden die Ressourcen für die Funktion erneut geladen. Dies ist vor allem nützlich, um Änderungen an der Implementierung der Funktion zu berücksichtigen. Dieser Parameter und
IF NOT EXISTS
schließen sich gegenseitig aus und können nicht zusammen angegeben werden.TEMPORARY
Gibt den Bereich der Funktion an, die erstellt wird. Wenn Sie
TEMPORARY
angeben, ist die erstellte Funktion gültig und in der aktuellen Sitzung sichtbar. Für diese Art von Funktionen erfolgt kein persistenter Eintrag im Katalog.IF NOT EXISTS
Falls angegeben, wird die Funktion nur erstellt, wenn sie nicht vorhanden ist. Die Erstellung der Funktion ist erfolgreich (es wird kein Fehler ausgelöst), wenn die angegebene Funktion bereits im System vorhanden ist. Dieser Parameter und
OR REPLACE
schließen sich gegenseitig aus und können nicht zusammen angegeben werden.-
Ein Name für die Funktion. Der Funktionsname kann optional mit einem Schemanamen qualifiziert werden.
In
hive_metastore
erstellte Funktionen dürfen nur alphanumerische ASCII-Zeichen und Unterstriche enthalten. class_name
Der Name der Klasse, die die Implementierung der zu erstellenden Funktion bereitstellt. Die implementierende Klasse muss eine der Basisklassen wie folgt erweitern:
- Muss
UDF
oderUDAF
im Paketorg.apache.hadoop.hive.ql.exec
erweitern. - Muss
AbstractGenericUDAFResolver
,GenericUDF
oderGenericUDTF
im Paketorg.apache.hadoop.hive.ql.udf.generic
erweitern. - Muss
UserDefinedAggregateFunction
im Paketorg.apache.spark.sql.expressions
erweitern.
- Muss
resource_locations
Die Liste der Ressourcen, die die Implementierung der Funktion sowie deren Abhängigkeiten enthalten.
Syntax:
USING { { (JAR | FILE | ARCHIVE) resource_uri } , ... }
Beispiele
-- 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