ユーザー定義関数(UDF)を使用すると、格納されたデータをユーザーが選択した関数によって操作できます。
Cassandra 2.2以降では、クエリー結果の一部としてテーブルに格納されたデータに適用できる関数を定義できます。この関数はSELECT文で使用する前に作成する必要があります。テーブルの各行でこの関数が実行されます。ユーザー定義関数を使用するには、cassandra.yamlファイルでenable_user_defined_functions
をtrue
に設定して関数を有効にする必要があります。 ユーザー定義関数はキースペース内で定義されます。キースペースを定義しなかった場合は、現在のキースペースが使用されます。Cassandra 3.0以降ではユーザー定義関数はサンドボックスで実行されます。
Cassandra 2.2以降ではデフォルトでjava
およびjavascript
での関数の定義がサポートされています。Python
、Ruby
、Scala
などのその他のスクリプト言語はclasspathにJARを追加することによって追加できます。
手順
-
戻り値のデータ型、言語、および実行する関数の実際のコードを指定して関数を作成します。次の関数
fLog()
は、各入力の対数値を計算します。この関数は、java
関数で構築されており、非線形データの線形プロットの生成に使用されます。この例では、単純な数学関数によってユーザー定義関数の機能を示します。
cqlsh> CREATE OR REPLACE FUNCTION fLog (input double) CALLED ON NULL INPUT RETURNS double LANGUAGE java AS 'return Double.valueOf(Math.log(input.doubleValue()));';
注: CALLED ON NULL INPUT
によって、関数は常に実行されることが保証されます。RETURNS
は、関数によって返される値のデータ型を定義します。
-
上の例に示したように
OR REPLACE
を使用すると、ある関数を別の関数によって置換することができます。キースペースに同じシグネチャーを持つ別の関数が存在しない場合に限り、オプションでIF NOT EXISTS
キーワードを使用して関数を作成することができます。OR REPLACE
とIF NOT EXISTS
は同じコマンドで使用できません。
cqlsh> CREATE FUNCTION IF NOT EXISTS fLog (input double) CALLED ON NULL INPUT RETURNS double LANGUAGE java AS 'return Double.valueOf(Math.log(input.doubleValue()));';