where
Verwenden Sie den where
-Befehl, um den Wert eines Ausdrucks als "true" oder "false" zu berechnen.
Themen:
Syntax
*|where <expression>
Mit dem Befehl verfügbare Operatoren
In der folgenden Tabelle sind die mit dem Befehl where
verfügbaren Operatoren aufgelistet. Siehe auch Benutzerfreundliche Zeitzeichenfolgen in Vergleichen.
Kategorie | Beispiel |
---|---|
Arithmetische Operatoren |
+ , - , * , / , % |
Vergleichsoperatoren |
= , != , < , > , <= , >= |
Logische Operatoren |
and , or , not |
Bedingungsoperatoren |
if(<expression>,<expression>,<expression>) |
Mehrere Vergleichsoperatoren |
in , not in |
Mit dem Befehl verfügbare Funktionen
In der folgenden Tabelle sind die mit dem Befehl where
verfügbaren Funktionen aufgelistet.
Kategorie | Beispiel |
---|---|
Zeichenfolgenfunktionen |
|
Numerische Funktionen |
|
Datumsfunktionen |
|
Bedingungsfunktionen |
|
Hashfunktionen |
|
Trigonometrische Funktionen |
|
Parameter
In der folgenden Tabelle sind die in diesem Befehl verwendeten Parameter sowie deren Beschreibungen aufgeführt.
Parameter | Beschreibung |
---|---|
|
Geben Sie den Ausdruck an, für den der Wert "true" oder "false" berechnet werden soll. |
Benutzerfreundliche Zeitzeichenfolgen im Vergleich
Mit der neuen Funktion kann eine menschenlesbare Zeichenfolge verwendet werden, um die Zeit in der Abfrage zu bearbeiten. In der Vergangenheit war dies erforderlich, indem Sie toDuration()
verwenden und die Dauer in einem ganz bestimmten Format angeben.
Beispiel 1: Fügen Sie einem Zeitstempelfeld eine Dauer hinzu.
*
| eval '10mins. after End Time' = 'Event End Time' + 10mins
| fields 'Event End Time', '10mins. after End Time'
Beispiel 2: Suchen Sie nach Jobs, die länger als 2 Stunden dauerten.
* | where 'Event End Time' - Time > 2hrs
Beispiel 3: Suchen Sie nach Elementen, die mehr als einen Tag oder weniger als wenige Millisekunden in Anspruch genommen haben.
*
| link
| where Count > 1000 and
('End Time' - 'Start Time' > 3hour or 'End Time' - 'Start Time' < 2ms)
Die Zeitzeichenfolge kann ein Wert sein, der im Parameter span
für timestats
verwendet wird. Siehe die Werteliste für timescale
in timestats.
Beispiele zur Verwendung des Befehls where
in typischen Szenarios finden Sie unter:
Im Folgenden finden Sie einige Beispiele für den Befehl 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 endsWith(uri, '.com')
*|where startsWith(uri, 'http://oracle')
*|where decode64(value) = decodeValue
*|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)
*| where arccos(angle) != NaN
*| where arcsin(angle) != NaN
*| where arctan(angle) != NaN
*| where atan2(x, y) != null
*| where cos(angle) > 0
*| where sin(angle) > e()
*| where sin(angle) > pi()
*| where sin(angle) > 0
*| where tan(angle) > 0
*| where toDegrees(angle) > 45
* | where toRadians(angle) > 0
Das folgende Beispiel zeigt die Verwendung der Bedingungsfunktion if
:
*|where if(Status = '200', OK, ERROR) = ERROR
Im folgenden Beispiel werden die IP-Adressen im Feld srvrhostip
mit einem Subnetzbereich verglichen.
*|where cidrmatch(srvrhostip, '192.0.2.254/25')
Das folgende Beispiel gibt den Zeichenfolgenwert des Feldes "Delay" zurück.
*|where Status = literal(Delay)
Im folgenden Beispiel wird das übereinstimmende Zeichen von beiden Enden entfernt.
*|where trim(Command,"\") = initparams
Im folgenden Beispiel wird das übereinstimmende Zeichen vom linken Ende entfernt.
*|where ltrim('Error ID',0) = 76890
Im folgenden Beispiel wird das übereinstimmende Zeichen vom rechten Ende entfernt.
*|where rtrim('OS Process ID',2) = 3123
Im folgenden Beispiel wird die Zeichenfolge Start Time
mit 1/1/18
im Datumsformat MM/dd/yy
verglichen.
*|where 'Start Time' > toDate('1/1/18', 'MM/dd/yy')
Das folgende Beispiel berechnet die Differenz zwischen den Werten von End Time
und Start Time
und vergleicht die Zeichenfolge mit der Dauer von 0:0:45
.
*|where 'End Time' - 'Start Time' > toDuration('0:0:45')
Im folgenden Beispiel wird das Format der Dauer als 0:0:45.000
angegeben.
*|where formatDuration('End Time' - 'Start Time') = '0:0:45.000'
Die folgenden Beispiele veranschaulichen die Verwendung von Datumsfunktionen.
*|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
Das folgende Beispiel berechnet die Position von .com
in der uri
-Zeichenfolge und wertet aus, ob sie ungleich -1
ist.
*| where indexOf(uri, '.com') != -1
Sie können die Hashfunktionen MD5, SHA1, SHA256 und SHA512 mit dem where-Befehl verwenden, um Logdaten zu filtern. Im folgenden Beispiel wird ausgewertet, ob der Wert des Feldes user
md5("jack")
lautet.
*|where user = md5("jack")
Der folgende Befehl teilt den Inhalt des Entityfeldes in zwei Teile auf. Beispiel: Der Entitywert host-phx-1.oraclevcn.com
mit dem Muster würde in zwei virtuelle Felder namens Host und Domain mit dem Domainwert oraclevcn.com
aufgeteilt:
* | extract field = Entity '(?P<Host>\w+)\.?(?P<Domain>.*)'
| where contains(Domain, 'oraclevcn.com')
| timestats count as logrecords by 'Log Source'
Der folgende Befehl berechnet den Abstand (in Meilen) zwischen zwei Paaren lat-long Koordinaten, die in Grad angegeben sind, wenn die Eingabewerte Zahlen sind, und prüft, ob dieser Abstand größer als 1000 ist:
* | where distance(lat1, long1, lat2, long2) > 1000
Der folgende Befehl berechnet den Abstand (in Meilen) zwischen zwei Paaren lat-long Koordinaten (in Grad), wenn die Eingabewerte zwei Zeichenfolgen sind, und prüft, ob dieser Abstand größer als 1000 ist:
* | where distance('lat1,long1', 'lat2,long2') > 1000