ユーザー定義関数(UDF)の作成

ユーザー定義関数(UDF)を使用すると、格納されたデータをユーザーが選択した関数によって操作できます。

Cassandra 2.2以降では、クエリー結果の一部としてテーブルに格納されたデータに適用できる関数を定義できます。この関数はSELECT文で使用する前に作成する必要があります。テーブルの各行でこの関数が実行されます。ユーザー定義関数を使用するには、cassandra.yamlファイルでenable_user_defined_functionstrueに設定して関数を有効にする必要があります。 ユーザー定義関数はキースペース内で定義されます。キースペースを定義しなかった場合は、現在のキースペースが使用されます。Cassandra 3.0以降ではユーザー定義関数はサンドボックスで実行されます。

Cassandra 2.2以降ではデフォルトでjavaおよびjavascriptでの関数の定義がサポートされています。PythonRubyScalaなどのその他のスクリプト言語は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 REPLACEIF 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()));';