ユーザー定義関数(UDF)の作成
SELECT、INSERTおよびUPDATE文で使用するカスタム関数を、Javaやその他のプログラミング言語を使用して作成します。
SELECT、INSERTおよびUPDATE文で使用するカスタム関数を、Javaやその他のプログラミング言語を使用して作成します。関数は、それが定義されているキースペース内でのみ使用できます。
クエリー結果の一部としてテーブルに格納されているデータに対して実行される関数を定義できます。この関数はSELECT文で使用する前に作成する必要があります。関数は、テーブルの各行に対して実行されます。
言語の追加
DataStax Enterprise 5.0以降では、デフォルトでJavaおよびJavaScriptで作成された関数をサポートしています。
Python
、Ruby
、Scala
など、他のスクリプト言語のサポートを追加するには、JARをclasspathに追加します。JARファイルを次の場所にインストールします。- パッケージおよびInstaller-Servicesのインストール: /usr/share/dse/cassandra/lib/jsr223/language/jar-name.jar
- tarボールおよびInstaller-No Servicesのインストール: installation_location/jsr223/language/jar-name.jar
注: 関数を作成するときは、LANGUAGEを
jruby
、jpython
、またはscala
と定義します。始める前に
デフォルトでは、ユーザー定義関数を追加する機能は無効になっています。有効にするには、次の設定を cassandra.yamlファイル内で変更します。
- Java:enable_user_defined_functionsを
true
に設定します。 - JavaScriptとその他のカスタム言語:enable_scripted_user_defined_functionsを
true
に設定します。
手順
-
戻り値のデータ型、言語、および実行する関数の実際のコードを指定して関数を作成します。次の関数
fLog()
は、各入力の対数値を計算します。この関数は、組み込みのjava
関数で、非線形データの線形プロットの生成に使用されます。この例では、単純な数学関数によってユーザー定義関数の機能を示します。CREATE FUNCTION cycling.flog(target_name double) CALLED ON NULL INPUT RETURNS double LANGUAGE java AS $$return Double.valueOf(Math.log(input.doubleValue()));$$;
注:- target_name
- ターゲット・カラムからの入力がnullの場合のアクション:
CALLED ON NULL INPUT
によって、関数は常に実行されることが保証されます。RETURNS NULL ON NULL INPUT
によって、入力引数のいずれかがNULL
の場合、関数が常にNULL
を返すことが保証されます。
RETURNS
は、関数によって返される値のCQLデータ型を定義します。
-
上の例に示したように
OR REPLACE
を使用すると、ある関数を別の関数で置き換えることができます。キースペースに同じシグネチャーを持つ別の関数が存在しない場合に限り、必要に応じてIF NOT EXISTS
キーワードを使用して関数を作成することができます。OR REPLACE
とIF NOT EXISTS
は同じコマンドで使用できません。CREATE OR REPLACE FUNCTION cycling.flog(input double) CALLED ON NULL INPUT RETURNS double LANGUAGE java AS $$return Double.valueOf(Math.log(input.doubleValue()));$$;