CREATE FUNCTION(외부)
적용 대상: Databricks 런타임
임시 또는 영구 외부 함수를 만듭니다. 임시 함수는 영구 카탈로그에서 영구 함수가 만들어지고 모든 세션에서 사용할 수 있는 세션 수준에서 범위가 지정됩니다.
USING
절에 지정된 리소스는 처음으로 실행될 때 모든 실행기에서 사용할 수 있습니다.
SQL 인터페이스 외에도 Spark를 사용하면 Scala, Python 및 Java API를 사용하여 사용자 지정 사용자 정의 스칼라 및 집계 함수를 만들 수 있습니다. 자세한 내용은 UDF(외부 사용자 정의 스칼라 함수) 및 UDF(사용자 정의 집계 함수)를 참조하세요.
구문
CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]
function_name AS class_name [ resource_locations ]
매개 변수
OR REPLACE
지정된 경우 함수에 대한 리소스가 다시 로드됩니다. 이는 주로 함수 구현에 대한 변경 내용을 선택하는 데 유용합니다. 이 매개 변수는
IF NOT EXISTS
와 양립할 수 없으며 함께 지정할 수 없습니다.TEMPORARY
생성되는 함수의 범위를 나타냅니다.
TEMPORARY
가 지정되면 만들어진 함수가 유효하고 현재 세션에서 볼 수 있습니다. 이러한 종류의 함수에 대해 카탈로그에 영구 항목이 만들어지지 않습니다.IF NOT EXISTS
지정하면 존재하지 않는 경우에만 함수를 만듭니다. 지정된 함수가 시스템에 이미 있는 경우 함수 만들기가 성공합니다(오류가 throw되지 않음). 이 매개 변수는
OR REPLACE
와 양립할 수 없으며 함께 지정할 수 없습니다.-
함수의 이름입니다. 함수 이름은 선택적으로 스키마 이름으로 규정될 수 있습니다.
생성된
hive_metastore
함수는 영숫자 ASCII 문자와 밑줄만 포함할 수 있습니다. class_name
생성할 함수에 대한 구현을 제공하는 클래스의 이름입니다. 구현 클래스는 다음과 같이 기본 클래스 중 하나를 확장해야 합니다.
org.apache.hadoop.hive.ql.exec
패키지에서UDF
또는UDAF
를 확장해야 합니다.org.apache.hadoop.hive.ql.udf.generic
패키지에서AbstractGenericUDAFResolver
,GenericUDF
또는GenericUDTF
를 확장해야 합니다.org.apache.spark.sql.expressions
패키지에서UserDefinedAggregateFunction
을 확장해야 합니다.
resource_locations
해당 종속성과 함께 함수의 구현을 포함하는 리소스 목록입니다.
구문:
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