CREATE FUNCTION
説明
CREATE FUNCTION ステートメントは、Spark で一時的または永続的な関数を作成するために使用されます。一時関数はセッションレベルでスコープが設定されるのに対し、永続関数は永続的なカタログに作成され、すべてのセッションで利用可能になります。USING 句で指定されたリソースは、最初に実行されるときにすべてのエグゼキュータで利用可能になります。SQL インターフェイスに加えて、Spark では 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
作成される関数の名前を指定します。関数名は、オプションでデータベース名で修飾される場合があります。
構文:
[ database_name. ] function_name -
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 test;
+---------------------+
|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.
-- Please note that the temporary function does not have a qualified
-- database 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 test;
+---------------------+
|function_return_value|
+---------------------+
| 21|
| 22|
+---------------------+