Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения:
Databricks Runtime
Создает временную или постоянную внешнюю функцию. Временные функции действуют на уровне сеанса, тогда как постоянные функции создаются в постоянном каталоге и становятся доступными для всех сеансов.
Ресурсы, указанные в предложении USING, становятся доступными для всех исполнителей, когда они выполняются в первый раз.
В дополнение к возможностям интерфейса SQL в Spark можно создавать пользовательские скалярные и агрегатные функции с помощью API для Scala, Python и Java. Дополнительные сведения см. в статьях о внешних скалярных функциях (UDFs) и определяемых пользователем агрегатных функциях (UDAFs).
Замечание
Внешние функции нельзя создать в каталоге Unity.
Синтаксис
CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]
function_name AS class_name [ resource_locations ]
Параметры
ИЛИ ЗАМЕНИТЬ
Если этот параметр указан, происходит перезагрузка ресурсов для функции. Это в основном полезно для отслеживания изменений, внесенных в реализацию функции. Этот параметр является взаимоисключающим с
IF NOT EXISTS, вместе с которым его нельзя указывать.ВРЕМЕННО
Указывает область создаваемой функции. Если указан параметр
TEMPORARY, то созданная функция является допустимой и отображается в текущем сеансе. В каталоге не создаются постоянные записи для таких функций.ЕСЛИ НЕ СУЩЕСТВУЕТ
Если этот параметр указан, функция создается только в том случае, если она не существует. Функция успешно создается (ошибки не возникает), если указанная функция уже существует в системе. Этот параметр является взаимоисключающим с
OR REPLACE, вместе с которым его нельзя указывать.-
Имя функции. Имя функции может быть при необходимости дополнительно квалифицировано по имени схемы.
Функции, созданные в
hive_metastore, могут содержать только буквенно-цифровые символы ASCII и символы подчеркивания. class_name
Имя класса, который предоставляет реализацию для создаваемой функции. Реализующий класс должен расширять один из базовых классов следующим образом:
-
UDFилиUDAFследует расширяться в рамках пакетаorg.apache.hadoop.hive.ql.exec. - Следует расширять
AbstractGenericUDAFResolver,GenericUDFилиGenericUDTFв пакетеorg.apache.hadoop.hive.ql.udf.generic. -
UserDefinedAggregateFunctionследует расширить в пакетеorg.apache.spark.sql.expressions.
-
расположение_ресурсов
Список ресурсов, содержащих реализацию функции вместе со своими зависимостями.
Синтаксис:
USING { { (JAR | FILE | ARCHIVE) resource_uri } , ... }
Примеры
-- 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