CREATE FUNCTION

ユーザー指定のコードを実行するためのカスタム関数を作成します。

SELECT、INSERT、UPDATEの各文に含まれるユーザー指定のコードを実行します。UDFスコープはキースペース全体です。デフォルトで、UDFにはJavaジェネリック・メソッドとJavaScriptのサポートが含まれます。Python、Ruby、Scalaなどのその他のJSR-223準拠スクリプト言語のサポートを追加するには、「ユーザー定義関数」を参照してください。

重要: ユーザー定義関数を作成する前に、enable_user_defined_functions=trueと、JavaScriptを実装する場合はenable_scripted_user_defined_functions=truecassandra.yamlで設定しておいてください。

構文

CREATE [OR REPLACE] FUNCTION [IF NOT EXISTS] 
[keyspace_name.]function_name ( 
    var_name var_type [,...])
[CALLED | RETURNS NULL] ON NULL INPUT 
RETURNS cql_data_type 
LANGUAGE language_name AS 
'code_block'; 
表 1. 凡例
構文規則 説明
大文字 リテラル・キーワード。
小文字 リテラル以外。
イタリック体 変数値。ユーザー定義値と置き換えます。
[] 任意。角かっこ( [] )で任意指定のコマンド引数を囲みます。角かっこは入力しないでください。
( ) グループ。丸かっこ(( ))は、選択肢を含むグループを示します。丸かっこは入力しないでください。
| または。縦棒( | )で代替要素を区切ります。要素のいずれかを入力してください。縦棒は入力しないでください。
... 繰り返し可能。省略記号(...)は、構文要素を必要な回数だけ繰り返すことができることを示します。
'Literal string' 単一引用符( ' )でCQL文内のリテラル文字を囲みます。大文字を維持するには、単一引用符を使用します。
{ key : value } マップ・コレクション。中かっこ( { } )でマップ・コレクションまたはキーと値のペアを囲みます。コロンでキーと値を区切ります。
<datatype1,datatype2> セット、リスト、マップ、またはタプル。山かっこ(< >)で、セット、リスト、マップまたはタプル内のデータ型を囲みます。データ型はコンマで区切ります。
cql_statement; CQL文の終了。セミコロン( ; )ですべてのCQL文を終了します。
[--] コマンドライン・オプションとコマンド引数は、2つのハイフン(--)で区切ります。この構文は、引数がコマンドライン・オプションと間違われる可能性がある場合に役立ちます。
' <schema> ...</schema> ' 検索CQLのみ:単一引用符( ' )でXMLスキーマ宣言全体を囲みます。
@xml_entity='xml_entity_type' 検索CQLのみ:スキーマ・ファイルおよびsolrConfigファイル内のXML要素を上書きするための実体とリテラル値を示します。
CREATE function_name
新しい関数を作成し、その関数が既に存在する場合にエラーを返します。エラーを抑制するには、IF NOT EXITSとともに使用してください。
OR REPLACE
新しい関数を作成するか、同じ名前の関数が既に存在する場合はその関数を上書きします。
IF NOT EXITS
同じ名前の関数が既に存在する場合にエラー・メッセージを抑制して、処理を実行しません。
var_name var_type

変数名とそれに続くCQLデータ型。これらの引数は、要求から実行用のコード・ブロックに渡されます。リテラルまたは項とプリペアド・ステートメント・プレースホルダーの使用もサポートされています。複数の引数はコンマ区切りリストで指定します。たとえば「column text, num int」のように指定します。

CALLED ON NULL INPUT
入力値がNullである場合や欠落している場合も、ユーザー指定のコード・ブロックを実行します。
RETURNS NULL ON NULL INPUT
ユーザー指定のコード・ブロックをNull値に対して実行せず、Nullを返します。
RETURNS cql_data_type
コード・ブロックからの出力期待値を互換性のあるCQLデータ型にマップします。
LANGUAGE language_name
サポートされている型はJavaとJavaScriptです。Python、Ruby、Scalaなどのその他のJSR-223準拠スクリプト言語のサポートを追加するには、「ユーザー定義関数」を参照してください。
'code_block' | $$ code_block $$
コード・ブロックは単一引用符で囲むか、コード・ブロックに特殊文字が含まれている場合は二重ドル記号($$)で囲みます。コードは関数としてラップされ、ターゲット変数に適用されます。
注意: UDFは、選択したプログラミング言語で発生する可能性のある標準的なあらゆる問題に対して脆弱です。Nullポインター例外、無効な引数、その他の潜在的な原因などの例外に対する対策を講じることが重要です。関数の実行時に例外が発生すると、文全体が失敗します。

入力値の対数を計算するfLog関数を上書きするか、作成します。CALLED ON NULL INPUTによって、関数が常に実行されることが保証されます。

CREATE OR REPLACE FUNCTION cycling.fLog (input double) 
CALLED ON NULL INPUT 
RETURNS double LANGUAGE java AS
'return Double.valueOf(Math.log(input.doubleValue()));';
JavaScriptのテキスト・フィールドから最初のN文字を返す関数を作成します。RETURNS NULL ON NULL INPUTによって、入力値がNullの場合に関数が実行されないことが保証されます。
CREATE FUNCTION IF NOT EXISTS cycling.left (column TEXT,num int) 
RETURNS NULL ON NULL INPUT 
RETURNS text 
LANGUAGE javascript AS 
$$ column.substring(0,num) $$;
要求で関数を使用します。
SELECT left(firstname,1), lastname from cycling.cyclist_name;
 cycling.left(firstname, 1) | lastname
----------------------------+-----------------
                          A |           FRAME
                          A |         PIETERS
                          M |        MATTHEWS
                          M |             VOS
                          P |       TIRALONGO
                          S |      KRUIKSWIJK
                          A | VAN DER BREGGEN
cassandra.yamlファイルの場所は、インストールのタイプによって異なります。

パッケージ・インストール
Installer-Servicesインストール

/etc/dse/cassandra/cassandra.yaml

tarボール・インストール
Installer-No Servicesインストール

install_location/resources/cassandra/conf/cassandra.yaml