フィールド演算プロセッサを使用して値を計算できます。このプロセッサは、式を評価して必要な値を生成します。式には、処理中のジオイベント内の指定されたフィールドから取得した文字列リテラル、数値定数、およびイベント データを含めることができます。計算された値を既存のフィールドに書き込み、現在そのフィールドに格納されているデータを上書きするか、計算された値をプロセッサが作成した新しいフィールドに書き込むことができます。
フィールド演算プロセッサは汎用的なプロセッサです。「Distance * 0.3048」などの相対的に一定の式を使用して、与えられたフィート単位の距離と等価な距離を、メートル単位で計算できます。このプロセッサは、replaceAll(Description, 'foo', 'bar') などのさまざまな Java 文字列関数もサポートしています。たとえば、このプロセッサを使用して、各ジオイベントの説明フィールド内のサブ文字列「foo」のインスタンスを、すべてサブ文字列「bar」に置き換えることができます。このプロセッサは、多くの数学関数もサポートしています。たとえば、max(Time1, Time2) を使用してジオイベントの 2 つのフィールドの値のうちでどちらが大きいかを特定したり、random() を使用して乱数を生成することができます。
フィールド演算プロセッサを使用する場合に考慮すべきことを以下に示します。
- 式は、数学的に記述するか、単語 (数値ではなく文字列) を使用して記述することができます。
- 文字列リテラルを操作する場合、「'Cat' + ' ' + 'Dog'」のように必ず一重引用符で囲みます。
- このプロセッサは、タイプを変換できない場合または式を評価できない場合、NULL 値を出力します。
- 式内のオペランドは、ジオイベント定義内のリテラル フィールド名またはフィールドに適用されたタグにすることができます。たとえば、「Odom1 + Odom2」という式を使用すると、Odom1 フィールドと Odom2 フィールドの値が加算され、単純な和が求められます。Odom1 フィールドに MILEAGEA というタグが付けられおり、Odom2 フィールドに MILEAGEB というタグが付けられている場合は、式「MILEAGEA + MILEAGEB」を使用できます。
- 式内の異なるタイプのデータを処理する場合、適切な変換が行われます。たとえば、「325 + 0.125」は等価な「325.0 + 0.125」に変換されます。指定された出力フィールドに Long Integer 値が必要な場合、計算された Double 値は切詰められます。
- 式を作成する際に、オーバーフローに注意してください。たとえば、式「60 * 60 * 80 * 10000」内の各項は Short Integer ですが、この計算結果は通常の Integer の 32 ビットの範囲を超えます。各項を「60.0 * 60.0 * 80.0 * 10000.0」のように Double 値で表すと、この問題を防ぐことができます。
- 計算された値を新しいフィールドに書き込むと、ジオイベントのスキーマが変更されるため、GeoEvent Server は新しいジオイベント定義を作成する必要があります。このプロセッサを使用して新しいフィールドを作成する場合、フィールド名とデータ タイプを指定する必要があります。ジオイベント定義の名前とオプションのタグを指定することができます。指定した場合、作成されたジオイベント定義内の新しいフィールドに適用されます。
フィールド演算プロセッサでサポートされている演算子と関数を次に示します。
フィールド演算プロセッサでサポートされている演算子と関数
演算 | 演算子 | 例 |
---|---|---|
加算 |
|
この式では、「Odom1」フィールドの数値と「Odom2」フィールドの数値が加算され、単純な和が求められます。文字列の連結にも対応しています (「'Hello' + 'World'」など)。 |
減算 |
|
この式では、「VALUEA」というタグが設定されたフィールドの数値から「VALUEB」というタグが設定されたフィールドの数値が減算され、単純な差が求められます。 加算とは異なり、文字列の連結に対応していないので、2 つの文字列の差を求めることはできません。 |
乗算 |
|
この式では、「Altitude」というフィールドの数値と定数「0.3048」が乗算され、単純な積が求められます (この場合は、フィート単位の値がメートル単位でそれに相当する値に変換される)。 |
部門 |
|
この式では、「Distance」というフィールドの数値が定数「1.609344」で除算され、単純な商が求められます (この場合は、キロメートル単位の値がマイル単位に相当する値に変換される)。 |
剰余 |
|
この式では、「VALUEA」というタグが設定されたフィールドの数値が、「VALUEB」というタグが設定されたフィールドの数値で除算され、その剰余が倍精度値で返されます。 |
論理積 |
|
この式では、「Flag1」というフィールドのブール値と「Flag2」というフィールドのブール値に対して論理積演算が実行され、ブール結果が求められます。入力フィールドのデータ型を Boolean にする必要があります。式に含まれる文字列リテラル (例: TRUE) と定数値 (例: 1) は、計算の一環としてそれに相当するブール値に変換されません。 |
論理和 |
|
この式では、「Flag1」というフィールドのブール値と「Flag2」というフィールドのブール値に対して論理和演算が実行され、ブール結果が求められます。 |
論理否定 |
|
この式では、「Flag1」というフィールドのブール値に対して論理否定演算が実行され、ブール結果が求められます。ネストされた式に対応しています (例: !(Flag1 && Flag2))。 |
より大きい |
|
この式では、「Altitude」というフィールドの値が指定された定数より大きいかどうかを求める論理演算が実行されます (結果はブール値になる)。 |
以上 |
|
この式では、「Altitude」というフィールドの値が指定された定数以上かどうかを求める論理演算が実行されます (結果はブール値になる)。 |
より小さい |
|
この式では、「Altitude」というフィールドの値が指定された定数より小さいかどうかを求める論理演算が実行されます (結果はブール値になる)。 |
以下 |
|
この式では、「Altitude」というフィールドの値が指定された定数以下かどうかを求める論理演算が実行されます (結果はブール値になる)。 |
等価 |
|
この式では、「VALUEA」というタグが設定されたフィールドの値と「VALUEB」というタグが設定されたフィールドの値が等しいかどうかを求める論理演算が実行されます (結果はブール値になる)。初期の製品リリース (10.2.0) では、等価演算子は数値型でしかサポートされていません。 |
不等価 |
|
この式では、「VALUEA」というタグが設定されたフィールドの値と「VALUEB」というタグが設定されたフィールドの値が等しくないかどうかを求める論理演算が実行されます (結果はブール値になる)。初期の製品リリース (10.2.0) では、不等価演算子は数値型でしかサポートされていません。 |
備考:
フィールド演算プロセッサは、型が混在する場合、値の自動変換を試みます。たとえば、「10.0 + 5」という式は、2 つの浮動小数点値の和を計算するように自動変換されます。「codeValue + 'SomeString'」 (codeValue は数値) のように、数値と文字列が混在している場合、不明の値が生成されます。下で説明する codeValue などの文字列関数を使用して、明示的に valueOf(object) を文字列に変換するのが正しい方法です。備考:
フィールド演算プロセッサの等価演算子と不等価演算子は、浮動小数点値に直接適用することができません。2 つの小数値が等しいかどうかを正確に比較するには、まずこれらの値の位取りを行い、これらの値を長整数に四捨五入してから、長整数値を比較します。
- 「MyFloat1 == MyFloat2」のように比較しないでください。
- 代わりに、「round(MyFloat1*1000) == round(MyFloat2*1000)」のように比較します。
フィールド演算プロセッサには、java.lang.Math にある関数を正確に反映した関数が用意されています。関数の技術仕様と完全なリストについては、Java 開発者向け資料をご参照ください。使用頻度の高い関数を次にまとめてあります。
フィールド演算の定数
関数 | 説明 |
---|---|
E() | オイラー数 (e) を指定された倍精度値乗して求められた値が返されます。 |
PI() | pi (直径に対する円周の割合) の倍精度表現が返されます。 |
フィールド演算用の時間関数
関数 | 説明 |
---|---|
currentTime() | ローカル サーバーの現在のシステム時間が long の標準時間 (ミリ秒) で返されます。 |
receivedTime() | 入力コネクタがイベントを作成したときのタイムスタンプが返されます。 |
フィールド演算に共通の関数
関数 | 説明 |
---|---|
abs(値) | 引数の絶対値が返されます。 |
ceil(倍精度値) | 指定された倍精度値以上の最小の整数値 (次に大きい整数値) が返されます。 |
currentTime() | システムの現在の日付/時刻が long integer (エポック ミリ秒) で返されます。 |
floor(倍精度値) | 指定された倍精度値以下の最大の整数値 (次に小さい整数値) が返されます。 |
hypot(倍精度値 x, 倍精度値 y) | 中間オーバーフローと中間アンダーフローなしで sqrt((x*x) + (y*y)) が返されます。 |
max(値 a, 値 b) | 指定された 2 つの引数値のうちの大きい方の値が返されます。 |
min(値 a, 値 b) | 指定された 2 つの引数値のうちの小さい方の値が返されます。 |
random() | 0.0 以上で 1.0 より小さい倍精度値が返されます。 |
receivedTime() | 入力コネクタがイベント レコードを受信した日付/時刻を long integer (エポック ミリ秒) で取得します。 |
round(値) | 引数値に最も近い長整数値が返されます (倍精度値が渡される)。 |
備考:
フィールド演算プロセッサは、可能な場合は数値型の変換に対応します。たとえば、関数に異なる型の数値を指定すると (例: max(3.14159,25))、比較を実行できるように、これらの値が比較可能な型 (Int、Float、または Double) に変換されます。また、このプロセッサでは、イベントの属性フィールドに値が書き込まれた時点で算出された値の型が変換されます (たとえば、イベントのフィールドのデータ型が Double の場合は、6 + 7 が 13.0 と書き込まれる)。
フィールド演算の指数
関数 | 説明 |
---|---|
sqrt(倍精度値) | 指定された倍精度値の平方根が返されます。 |
cbrt(値) | 指定された倍精度値の立方根が返されます。 |
exp(倍精度値) | オイラー数 (e) を指定された倍精度値乗して求められた値が返されます。 |
pow(倍精度値, 倍精度値) | 最初の引数を 2 番目の引数乗して求められた値が返されます。 |
フィールド演算の対数
関数 | 説明 |
---|---|
log(倍精度値) | 倍精度値の自然対数 (底を e とする) が返されます。 |
log10(倍精度値) | 倍精度値の 10 を底とする対数が返されます。 |
フィールド演算用の文字列関数
関数 | 説明 |
---|---|
参考までに、以下の構文例では、次の入力データ例を使用しています。 | |
length(string) 戻り値: integer 例: 'TrackID length: ' + length(TrackID) | 文字列の長さを返します。 結果: "TrackID length: 7" |
isEmpty(string) 戻り値: boolean 例: isEmpty(EmptyStr) | ソースの長さが 0 の場合、TRUE を返します。 結果: true |
isNull(string) 戻り値: boolean 例: isNull(NullValue) | ソースの値が NULL の場合、TRUE を返します。 結果: true |
equals(string, string) 戻り値: boolean 例: equals(TrackID, EmptyStr) | 所定の文字列の属性値が等価である場合に TRUE を返します。文字列が等価でない場合は FALSE を返します。文字列以外の値が入力されている場合は null を返します。 結果: false |
equalsIgnoreCase(string, string) 戻り値: boolean 例: equalsIgnoreCase(TrackID, toString(TrackNum)) | ソース文字列と別の文字列を、大文字小文字の違いを無視して比較します。大文字小文字の違いを無視して、所定の文字列の属性値が等価である場合に TRUE を返します。文字列が等価でない場合は FALSE を返します。文字列以外の値が入力されている場合は null を返します。 結果: false 説明: 「AA-1234」と「1234」は等価ではありません |
compareTo(string, string) 戻り値: integer 例: compareTo('ABCXD', 'ABCZD') | 2 つの文字列を、辞書順で比較します。2 つの文字列が等価である場合、値 0 を返します。最初の文字列が 2 番目の文字列よりも辞書順で小さい場合、負の値を返します。最初の文字列が 2 番目の文字列よりも辞書順で大きい場合、0 よりも大きい値を返します。 結果: -2 説明: int('X') - int('Z') は -2 を返します (「X」は「Z」よりもアルファベット順で 2 つ前にあたるため) |
compareToIgnoreCase(string, string) 戻り値: integer 例: compareToIgnoreCase('abcde', 'ABCDE') | 大文字小文字の違いを無視して、2 つの文字列を辞書順で比較します。 結果: 0 |
startsWith(string, value) 戻り値: boolean 例: startsWith('Programming', 'Program') | 文字列の先頭が指定された接頭辞である場合に TRUE を返します。そうでない場合は、FALSE を返します。2 番目の引数 value は、文字列に暗黙的にキャストできる文字列または整数値です。 結果: true |
endsWith(string, value) 戻り値: boolean 例: endsWith(TrackID, TrackNum) | 文字列の末尾が指定された接尾辞である場合に TRUE を返します。そうでない場合は、FALSE を返します。2 番目の引数 value は、文字列に暗黙的にキャストできる文字列または整数値です。 結果: true 説明: 「AA-1234」の末尾は「1234」です |
indexOf(string, string, startIndex) 戻り値: integer 例: indexOf('ABCDABCBCA','BC',3) | 指定したインデックスから検索して、指定したサブ文字列が見つかった、検索文字列内の最初のインデックスを返します。文字列の先頭からインデックス検索する場合は、startIndex に 0 を指定します。 結果: 5 説明: 位置 3 の文字から始めて、サブ文字列「BC」が最初に現れたのは位置 5 です。 |
lastIndexOf(string, string, startIndex) 戻り値: integer 例: lastIndexOf(TrackID,'-',length(TrackID)) | 指定したインデックスから逆方向に検索して、指定したサブ文字列が見つかった、検索文字列内の最後のインデックスを返します。文字列の末尾からインデックス検索する場合は、startIndex に length(source) を指定します。 結果: 2 説明: 文字列の末尾から逆方向に検索して、サブ文字列「-」は位置 2 で見つかりました。 |
substring(string, intIndexBegin, intIndexEnd) 戻り値: string 例: substring('ABCDABCXYZABCDABC',7,10) | ソース文字列から抽出されたサブ文字列を新しい文字列として返します。サブ文字列には、指定されたインデックス intIndexBegin からインデックス (intIndexEnd -1) までの文字が含まれます。3 番目のパラメーターは、ネストされた関数 length(source) または文字列の末尾を意味する -1 で表すことができます。 結果: "XYZ" 説明: 文字インデックス 7 (「X」) から始まり、位置 7、8、9 の 3 文字が返されます。 |
concat(string, string) 戻り値: string 例: concat('Hello', 'World') | 指定された文字列 str を、ソース文字列の末尾に連結します。 結果: "HelloWorld" |
matches(string, regex) 戻り値: boolean 例: matches(TrackID, '[A-Z]+[-][0-9]+') | 指定した正規表現パターンが指定した文字列と一致する場合に TRUE を返します。そうでない場合は、FALSE を返します。正規表現パターン regex は 2 番目の文字列として指定します。 結果: true 説明: TrackID の全体がパターン「文字数が 1 以上、次の文字がダッシュ、その次に数字が 1 桁以上」に一致しています。 |
contains(string, substring) 戻り値: boolean 例: contains(TrackID,'-') | ソース文字列に指定したサブ文字列が含まれている場合に TRUE を返します。そうでない場合は、FALSE を返します。 結果: true 説明: TrackID の文字列内のどこかにリテラル「-」が含まれています。 |
replaceFirst(string, regex, replacement) 戻り値: string 例: replaceFirst(TrackID,'[0-9]+','nnnnn') | 指定した正規表現パターンに一致する最初のサブ文字列を、指定した置換文字列に置き換え、結果を新しい文字列として返します。 結果: "AA-nnnnn" 説明: パターン「数字が 1 桁以上」に一致する最初のサブ文字列が文字列リテラル「nnnnn」に置き換えられました。 |
replaceAll(string, regex, replacement) 戻り値: string 例: replaceAll('ABABCABABABD','AB','X') | 指定された正規表現と一致するソース文字列の各サブ文字列を、指定された replacement に置き換えます。結果の文字列を新しい文字列として返します。 結果: "XXCXXXD" 説明: 正規表現パターン「AB」は、すべて文字列リテラル「X」に置き換えられました。 |
replace(source, target, replacement) 戻り値: string 例: replace('2017-12-31','-','/') | 文字列リテラルとして指定されたサブ文字列をすべて、指定された (文字列リテラルとしても指定されている) 置換サブ文字列で置き換えます。結果の文字列を新しい文字列として返します。 結果: " 2017/12/31" |
toLowerCase(string) 戻り値: string 例: TrackID + ' to lower: ' + toLowerCase(TrackID) | デフォルト ロケールの規則を使用して、ソース文字列内のすべての文字を小文字に変換します。小文字に変換された文字列を新しい文字列として返します。 結果: "AA-1234 to lower: aa-1234" |
toUpperCase(string) 戻り値: string 例: TrackID + ' to upper: ' + toUpperCase(TrackID) | デフォルト ロケールの規則を使用して、ソース文字列内のすべての文字を大文字に変換します。大文字に変換された文字列を返します。 結果: "AA-1234 to upper: AA-1234" 説明: この例では、TrackID のアルファベット部分はすでに大文字でした。 |
trim(string) 戻り値: string 例: | 先頭と末尾の空白スペースを削除して、ソース文字列のコピーを返します。 結果: "GeoEvent Server" |
toString(fieldName) 戻り値: string 例: toString(Geometry) 例: toString(Epoch) | 指定したイベント属性フィールドの値の文字列表現を返します。これらの関数により、日付およびジオメトリ属性の文字列表現をサブ文字列などの形で他の関数内にネストできるようになるため、リアルタイム解析で高次データ タイプから情報を抽出できます。 結果: "{""x"":32.125,""y"":-117.125,""spatialReference"":{""wkid"":4326}}" 結果: "Fri Nov 03 17:07:56 PDT 2017" |
valueOf(fieldName) 戻り値: string 例: valueOf(Geometry) 例: valueOf(Epoch) | 指定したイベント属性フィールドの値の文字列表現を返します。toString() および valueOf() 関数は、同じ実装をラップしています。 |
フィールド演算の三角関数
関数 | 説明 |
---|---|
acos(倍精度値) | 値の逆余弦が返されます (返される角度は 0.0 と pi の間にある)。 |
asin(倍精度値) | 値の逆正弦が返されます (返される角度は -pi/2 と pi/2 の間にある)。 |
atan(倍精度値) | 値の逆正接が返されます (返される角度は -pi/2 と pi/2 の間にある)。 |
atan2(倍精度値 y, 倍精度値 x) | 直交座標 (x, y) から極座標 (r, シータ) への変換によって取得された角度シータが返されます。 |
cos(倍精度値) | 角度の余弦が返されます。 |
cosh(倍精度値) | 倍精度値の双曲線余弦が返されます。 |
sin(倍精度値) | 角度の正弦が返されます。 |
sinh(倍精度値) | 倍精度値の双曲線正弦が返されます。 |
tan(倍精度値) | 角度の正接が返されます。 |
tanh(倍精度値) | 倍精度値の双曲線正接が返されます。 |
toDegrees(倍精度値) | ラジアン単位で計測された角度が度単位の近似角度に変換されます。 |
toRadians(倍精度値) | 度単位で計測された角度がラジアン単位の近似角度に変換されます。 |