フィールドの式
Sumo クエリ言語を使用して、次のような計算済みの式に基づいてフィールドを作成できます。
| 3 + 2 as val | "Hello, world" as welcome | 34 % 10 as remainder
式はリテラル値、フィールド名、または concat() や pow() のように関数として機能する検索クエリ言語 operator によって作成されます。この方法で作成されたフィールドは、各行に同じ値がある仮想列として結果に表示され、where 句をはじめとする句で使用できます。
式を使用して、数値、ブール値、または文字列値のフィールドを作成できます。
数値式
数値は、加法、減法、乗法、除法、剰余演算、単項否定の組み合わせを使用して計算できます。"+" や "/" などの operator は、数値リテラル、数値フィールド、数値関数として機能する operator (abs() や pow() など)、またはネスト化された数値式に適用できます。数値関数の詳細については、「数式」を参照してください。
数値リテラル
クエリ言語では、数字、つまり数値リテラルとはスペースを含まない一連の桁であり、小数点が含まれる場合もあります。コンマは使用できず、先頭と末尾にゼロがある場合は無視されます。 "e+" や "e-" を使用して数字を指数と分ける指数表記も可能です。以下に簡単な数値リテラルの例を示します。
| 537 as a | 3.14e+4 as bigpi | -42.300 as b
先頭の "-" は単項否定であり、形式的に "+" や "/" operator と同じように扱われる点に注目してください。
数値リテラルには接尾辞を付けることができます。接尾辞にはサイズと時間の 2 種類があります。
サイズ接尾辞
共通の係数を乗じてスカラー数値を短く表現するための手段です。サイズ接尾辞の例:
| 2k as twoThousand | 1B as oneBillion | 1.5M as onePointFiveMillion | sizeBytes / 1Gi as sizeInGiB | sizeInKiB * (1Ki / 1Mi) as sizeInMiB
サポートされる接尾辞のリスト、および数値に掛ける係数を以下に示します。接尾辞では大文字と小文字が区別されます。SI スタイル (1000 ベース) と ISO/IEC 80000 スタイル (1024 ベース) の両方の接尾辞がサポートされています。
接尾辞 | 係数 | 接尾辞 | 係数 |
---|---|---|---|
K または k | 1000 | Ki | 1024 |
M | 1000000 | Mi | 1048576 |
G または B | 1000000000 | Gi | 1073741824 |
T | 1000000000000 | Ti | 1099511627776 |
P | 1000000000000000 | Pi | 1125899906842624 |
時間接尾辞
時間の単位を表すために使用します。返される時間の基本単位はミリ秒です。たとえば、1.5s は 1,500 として返されます。1.5 秒をミリ秒に変換した数値です。時間接尾辞の例:
| 1w as oneWeek | 1m as oneMinute | 1.5s as oneAndAHalfSeconds | 1d as day | 1h as hour
次の時間接尾辞もサポートされています。
接尾辞 | Time |
---|---|
ns | ナノ秒 |
us | マイクロ秒 |
ms | ミリ秒 |
s | 秒 |
m | 分 |
h | 時 |
d | 日 |
w | 週 |
arithmetic operator
数値の計算は通常の優先順位ルールに従い、括弧、乗法、除法が加法および減法より優先されます。優先順位が等しい場合は左から右の順で計算されます。いくつか例を挙げます。
| 537 + 435 as value | 52 * 6 - 2 as noparen // 310, not 208 | 52 * (6 - 2) as paren // 208, not 310 | 15 - -5 as sq | 334 % 10 as remainder
式には、一連の演算を含めることができます。
| 537 + 435 + 39 + 18.5 as value | 22 - (34 % 10) * pow(2, 3) as value
日付は認識されません。文字列 2015-03-15 は日付ではなく 1,997 となります。同じく、3/15/2015 は日付ではなく 9.92556e-5 となります。クエリ言語でリテラル日付を表現する方法はありません。
modulus operator "%" を使用すると、除法の余りが計算されます。たとえば、44 % 10 = 4 となります。これは、44 / 10 が 4 余り 4 であるためです。39 / 3 は 13 余り 0 であるため、39 % 3 = 0 となります。式 n % 2 = 0 はすべての偶数について true です。
pow operator は指数を計算するために使用します。operator "^" はクエリ言語では認識されません。2 を 8 乗するには、2^8 と表記するのではなく pow(2, 8) と表記します。底が 10 の場合、指数表記を使用できます: pow(10, 3) == 1.0e+3。
ブール式
ブール式はその結果が true または false になる式であり、やはりフィールドに割り当てることができます。“true” および “false” の語は予約語として機能します。ブールの “not” を意味するには "!" を使用します。例:
| true as yes | false as locked | !false as a // sets a to true
comparison operator
comparison operator には等号 ("=" または "==")、">"、"<"、">="、"<="、"<>" (または "!=") があり、ブール値が生成されます。例:
| x = 2 as duo // same as x == 2 as duo | y >= 49 as older | field <> 0 as nonzero | !(2 == field) as value // value is true if 'field' is not 2
x = y が代入ではなくブール式である点に注意してください。x が y に等しい場合、式は true であり、それ以外の場合は false です。文字列の比較では大文字と小文字が区別されます。y の値を変数 x に代入するには、y as x の構文を使用します。
文字列式と引用符
(一重引用符ではなく) 二重引用符が付いた文字は文字列リテラルです。文字列の二重引用符をエスケープするにはバックスラッシュを使用します。例:
| "Don’t forget" as reminder | "They said, \"No later than 10\"" as response | "Hello, \"Sue,\" if that is your name" as greeting | concat("Hello, ", "world") as welcome
文字列を結合するには concat() などの文字列関数を使用します。"+" や "." などの string operator はありません。format() operator は、指定された形式で文字列フィールドを作成できます。文字列の一部を抽出するには substring() を使用します。