적용 대상:
Databricks 런타임
임시 또는 영구 외부 함수를 만듭니다. 임시 함수는 세션 수준에서 범위가 지정되는 반면, 영구 함수는 영구 카탈로그에 생성되어 모든 세션에서 사용할 수 있습니다.
USING 절에 지정된 리소스는 처음으로 실행될 때 모든 실행기에서 사용할 수 있습니다.
SQL 인터페이스 외에도 Spark를 사용하면 Scala, Python 및 Java API를 사용하여 사용자 지정 사용자 정의 스칼라 및 집계 함수를 만들 수 있습니다. 자세한 내용은 UDF(외부 사용자 정의 스칼라 함수) 및 UDF(사용자 정의 집계 함수)를 참조하세요.
비고
외부 함수는 Unity 카탈로그에서 만들 수 없습니다.
구문
CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]
function_name AS class_name [ resource_locations ]
매개 변수
또는 대체
지정된 경우 함수에 대한 리소스가 다시 로드됩니다. 이는 주로 함수 구현에 대한 변경 사항을 감지하는 데 유용합니다. 이 매개 변수는
IF NOT EXISTS와 양립할 수 없으며 함께 지정할 수 없습니다.TEMPORARY
생성되는 함수의 범위를 나타냅니다.
TEMPORARY가 지정되면 만들어진 함수가 유효하고 현재 세션에서 볼 수 있습니다. 임시 함수가 스키마 내에system.session생성됩니다. 이러한 종류의 함수에 대해 카탈로그에 영구 항목이 만들어지지 않습니다.존재하지 않을 경우
지정하면 존재하지 않는 경우에만 함수를 만듭니다. 지정된 함수가 시스템에 이미 있는 경우 함수 만들기가 성공합니다(오류가 throw되지 않음). 이 매개 변수는
OR REPLACE와 양립할 수 없으며 함께 지정할 수 없습니다.-
함수의 이름입니다.
- 영구 함수: 함수 이름에 스키마 이름으로 선택적으로 수식 처리할 수 있습니다. 이름이 제한되지 않으면, 현재 스키마에서 영구 함수가 생성됩니다. Databricks Runtime 19 이상에서는 PATH 를 대상 스키마 선택에 사용하지 않습니다.
-
임시 함수: Databricks Runtime 18.0 이상에서는 함수 이름을 선택적으로 또는 .로
system.sessionsession자격을 줄 수 있습니다. 임시 함수가 스키마 내에system.session생성됩니다.
함수 이름은 스키마 내 모든 루틴(프로시저 및 함수)에 대해 고유해야 합니다.
생성된
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을 확장해야 합니다.
-
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