CREATE FUNCTION (外部)
適用対象: Databricks Runtime
一時または永続外部関数を作成します。 一時関数は、セッション レベルでスコープ設定されます。永続関数は永続カタログに作成され、すべてのセッションで使用できます。
USING
句で指定されたリソースは、すべての Executor で、その初回実行時に使用できるようになります。
Spark では、SQL インターフェイスに加えて、Scala、Python、Java API を使用して、カスタムのユーザー定義のスカラー関数と集計関数を作成できます。 詳細については、「外部ユーザー定義のスカラー関数 (UDF)」および「ユーザー定義の集計関数 (UDAF)」を参照してください。
構文
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
指定した場合、関数は存在しない場合にのみ作成されます。 指定された関数がシステムに既に存在する場合でも、関数の作成は成功します (エラーはスローされません)。 このパラメーターは
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