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 と相互に排他的であり、一緒に指定することはできません。

  • function_name

    関数の名前。 関数名は、必要に応じてスキーマ名で修飾できます。

    hive_metastore で作成された関数には、英数字の ASCII 文字とアンダースコアのみを含めることができます。

  • class_name

    作成する関数の実装を提供するクラスの名前。 実装クラスは、次のように基底クラスのいずれかを拡張する必要があります。

    • org.apache.hadoop.hive.ql.exec パッケージの UDF または UDAF を拡張します。
    • org.apache.hadoop.hive.ql.udf.generic パッケージの AbstractGenericUDAFResolverGenericUDF、または 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