where
where
コマンドを使用して、trueまたはfalseとなる式の値を計算します。
構文
*|where <expression>
コマンドで使用可能な演算子
次の表に、where
コマンドで使用できる演算子を示します。
カテゴリ | 例 |
---|---|
算術演算子 |
+ , - , * , / , % |
比較演算子 |
= , != , < , > , <= , >= |
論理演算子 |
and , or , not |
条件演算子 |
if(<expression>,<expression>,<expression>) |
複数比較演算子 |
in , not in |
コマンドで使用可能な機能
次の表に、where
コマンドで使用できるファンクションを示します。
カテゴリ | 例 |
---|---|
文字列ファンクション |
|
数値ファンクション |
|
日付ファンクション |
|
条件ファンクション |
|
ハッシュ・ファンクション |
|
-
concat()
ファンクションでは、整数、浮動小数点数、長整数などの数値データ型を入力できます。数値フィールドは、対応する文字列値に自動的に変換されます。 -
||
を使用して、n個の入力を連結できます。ここでも、対応する文字列値に自動的に変換される数値データ型を入力できます。
パラメータ
次の表に、このコマンドで使用されるパラメータとその説明を示します。
パラメータ | 説明 |
---|---|
|
trueまたはfalseの値を計算する必要がある式を指定します。 |
比較でのユーザーフレンドリな時間文字列
この機能により、人間が読める文字列を使用して問合せの時間を操作できます。これまでは、toDuration()
を使用して期間を非常に特定の形式で指定する必要がありました。
例1: タイムスタンプ・フィールドに期間を追加します。
*
| eval '10mins. after End Time' = 'Event End Time' + 10mins
| fields 'Event End Time', '10mins. after End Time'
例2: 2時間以上かかったジョブを検索します。
* | where 'Event End Time' - Time > 2hrs
例3: 1日以上か数ミリ秒未満の項目を検索します。
*
| link
| where Count > 1000 and
('End Time' - 'Start Time' > 3hour or 'End Time' - 'Start Time' < 2ms)
時間文字列は、timestats
のspan
パラメータで使用される値にできます。timestatsのtimescale
の値のリストを参照してください。
一般的なシナリオでwhere
コマンドを使用する例は、次を参照してください:
where
コマンドの例を次に示します。
*|where severity = FATAL
*|where 'Client Host City' = 'redwood city'
*|where upper(severity) = FATAL
*|where length(URI) >= 40
*|where replace('aabbcc', 'bb', 'xx') = aaxxcc
*| where capitalize(severity) = Fatal
*|where concat(host, concat(':', port)) != hostname
* | where contains(uri, '.com')
* | where encode64(uri) = encodeValue
* | where lastindexOf(uri, '.com') != -1
* | where reverse(Command) = smaraptini
*|where host || ':' || port != hostname
*|where substr('aabbcc', 2, 4) = bb
*|where round('Content Size') = 1000
*|where floor('Content Size') > 1000
*|where max('Content Size In', ''Content Size Out') < 1000
*|where urlDecode('http%3A%2F%2Fexample.com%3A893%2Fsolr%2FCORE_0_0%2Fquery') = URI
* | where urlEncode(uri) = field
*|where 'User Name' in (host1, host2)
次の例は、if
条件ファンクションの使用方法を示します:
* | where if(Status = '200', OK, ERROR) = ERROR
次の例は、フィールドsrvrhostip
のIPアドレスをサブネット範囲と比較します。
*|where cidrmatch(srvrhostip, '192.0.2.254/25')
次の例は、フィールドDelayの文字列値を返します。
*|where Status = literal(Delay)
次の例は、両端から一致する文字を削除します。
*|where trim(Command,"\") = initparams
次の例は、左端から一致する文字を削除します。
*|where ltrim('Error ID',0) = 76890
次の例は、右端から一致する文字を削除します。
*|where rtrim('OS Process ID',2) = 3123
次の例は、文字列Start Time
を、MM/dd/yy
という日付書式の1/1/18
と比較します。
*|where 'Start Time' > toDate('1/1/18', 'MM/dd/yy')
次の例は、End Time
とStart Time
の値の差異を計算し、その文字列を0:0:45
の期間と比較します。
*|where 'End Time' - 'Start Time' > toDuration('0:0:45')
次の例は、期間のフォーマットを0:0:45.000
として指定します。
*|where formatDuration('End Time' - 'Start Time') = '0:0:45.000'
次の例は、日付ファンクションの使用方法を示しています。
*|where 'Start Time' > dateAdd(now(), hour, -1)
*|where 'Start Time' > dateSet(now(), hour, 0, minute, 0, sec, 0, msec, 0)
*|where formatDate('Start Time', 'MM/dd/yyyy') = '01/15/2018'
*|where 'Start Time' - now() > 45000
次の例は、uri
文字列内の.com
の位置を計算し、それが-1
と等しくないかどうかを評価します。
*| where indexOf(uri, '.com') != -1
whereコマンドでmd5、sha1、sha256およびsha512ハッシュ・ファンクションを使用して、ログ・データをフィルタできます。次の例は、フィールドuser
の値がmd5("jack")
であるかどうかを評価します。
*|where user = md5("jack")
次のコマンドは、エンティティ・フィールドのコンテンツを2つの部分に分割します。たとえば、パターンを持つエンティティ値host-phx-1.oraclevcn.com
は、HostおよびDomainという2つの仮想フィールドに分割され、ドメイン値はoraclevcn.com
です。
* | extract field = Entity '(?P<Host>\w+)\.?(?P<Domain>.*)'
| where contains(Domain, 'oraclevcn.com')
| timestats count as logrecords by 'Log Source'