where

Utilizzare il comando where per calcolare che il valore di un'espressione sia true o false.

Sintassi

*|where <expression>

Operatori disponibili con il comando

La tabella seguente elenca gli operatori disponibili con il comando where. Vedere anche Stringhe temporali facili da usare nei confronti.

Categoria Esempio

Operatori Arithmetic

+, -, *, /, %

Operatori di confronto

=, !=, <, >, <=, >=

Operatori logici

and, or, not

Operatori condizionali

if(<expression>,<expression>,<expression>)

Operatori di confronto multipli

in, not in

Funzioni disponibili con il comando

La tabella seguente elenca le funzioni disponibili con il comando where.

Categoria Esempio

Funzioni di stringa

  • capitalize(String)

  • concat(String, String)

    • Per la funzione concat(), è possibile immettere tipi di dati numerici quali numeri interi, a virgola mobile o lunghi. I campi numerici con cui vengono convertiti automaticamente nei valori stringa corrispondenti.

    • È possibile utilizzare || per concatenare il numero di input n. Anche in questo caso, è possibile immettere tipi di dati numerici che verranno convertiti automaticamente nei valori stringa corrispondenti.

  • decode64(String)

    Nota: se il valore stringa è un campo, deve fare distinzione tra maiuscole e minuscole.

  • encode64(String)

  • indexof(String, String [,int])

  • lastindexof(String, String, int)

  • length(String)

  • literal(String)

  • lower(String)

  • ltrim(String, Character)

  • replace(String, String, String)

  • reverse(String)

  • rtrim(String, Character)

  • substr(String, int [, int])

  • todate(String [, format])

  • toduration(String)

  • tonumber(String)

  • trim(String)

  • trim(String, Character)

  • upper(String)

  • urlDecode(String)

  • urlEncode(String)

Funzioni numeriche

  • abs(number)

  • ceil(number)

  • distance(number, number, number, number)

    Il valore restituito dalla funzione è espresso in miglia. I numeri sono in gradi. toRadians() converte i gradi in radianti.

  • distance(string, string)

    Il valore restituito dalla funzione è espresso in miglia. I numeri sono in gradi.

  • floor(number)

  • formatduration(number)

  • max(number, number)

  • min(number, number)

  • power(number, int)

  • round(number, int)

  • sqrt(number)

  • tostring(number)

Funzioni data

  • dateadd(date, property, amount)

  • dateset(date, property, value [, property, value])

  • formatdate(ate [,format])

  • now()

Funzioni condizionali

  • cidrmatch(String, String)

  • contains(String, String)

  • endsWith(String, String)

  • if(<expression>, <expression>, <expression>)

  • startsWith(String, String)

  • anyOf(condition1, condition2, ..., conditionN)

  • allOf(condition1, condition2, ..., conditionN)

  • anyFields(wildCardExpression) = value

  • allFields(wildCardExpression) = value

Funzioni hash

  • md5(<value to hash>)

  • sha1(<value to hash>)

  • sha256(<value to hash>)

  • sha512(<value to hash>)

Funzioni trigonometriche

  • arccos(<number>)

    Coseno dell'arco di un angolo.

  • arcsin(<number>)

    Seno artico di un angolo.

  • arctan(<number>)

    Arco tangente di un angolo.

  • atan2(<numbera>,<numberb>)

    Angolo in raggi su una coordinata polare, per le coordinate cartesiane a e b.

  • cos(<number>)

    Coseno trigonometrico di un angolo.

  • e()

    Valore della costante matematica e.

  • pi()

    Valore di pi.

  • sin(<number>)

    Seno trigonometrico di un angolo nei radianti.

  • tan(<number>)

    Tangente di un angolo.

  • toDegrees(<number>)

    Convertire da radianti a gradi.

  • toRadians(<number>)

    Convertire da gradi a radianti.

Parametri

Nella tabella seguente sono elencati i parametri utilizzati in questo comando, insieme alle relative descrizioni.

Parametro Descrizione

boolean_expression

Specificare l'espressione per la quale deve essere calcolato il valore true o false.

Stringhe di tempo facili da usare nei confronti

La nuova funzionalità consente di utilizzare una stringa leggibile dall'utente per manipolare il tempo nella query. In passato, questo richiedeva l'utilizzo di toDuration() e la durata in un formato molto specifico.

Esempio 1: aggiungere una durata a un campo indicatore orario.

* 
| eval '10mins. after End Time' = 'Event End Time' + 10mins
| fields 'Event End Time', '10mins. after End Time'

Esempio 2: ricerca di job che richiedevano più di 2 ore.

* | where 'Event End Time' - Time > 2hrs

Esempio 3: ricerca di elementi che richiedevano più di un giorno o meno di pochi millisecondi.

* 
| link 
| where Count > 1000 and 
       ('End Time' - 'Start Time' > 3hour or 'End Time' - 'Start Time' < 2ms) 

La stringa temporale può essere un valore utilizzato nel parametro span per timestats. Vedere l'elenco di valori per timescale in timestat.

Ecco alcuni esempi del comando 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

L'esempio seguente mostra l'uso della funzione condizionale if.

*|where if(Status = '200', OK, ERROR) = ERROR

L'esempio seguente mostra l'uso della funzione condizionale anyOf. Restituisce i valori di severità che iniziano con d o iniziano con f:

* | distinct Severity | where anyof(substr(Severity, 0, 1) = d, substr(Severity, 0, 1) = f)

L'esempio seguente mostra l'uso della funzione condizionale allOf. Restituisce i valori di severità che iniziano con f e non sono fatal:

* | distinct Severity | where allof(Severity != fatal, substr(Severity, 0, 1) = f)

L'esempio seguente mostra l'uso della funzione condizionale anyFields. Corrisponde ai log con uno qualsiasi dei campi numerici che terminano con lunghezza e hanno un valore 2:

* | where anyFields('*length') = 2

L'esempio seguente mostra l'uso della funzione condizionale allFields. Restituisce i log in cui tutti i campi che iniziano con tar (ad esempio Target, Target Guid, Target Type) sono non nulli:

* | where allfields('tar*') != null

Nell'esempio seguente vengono confrontati gli indirizzi IP nel campo srvrhostip con un intervallo di subnet.

*|where cidrmatch(srvrhostip, '192.0.2.254/25')

L'esempio seguente restituisce il valore stringa del campo Ritardo.

*|where Status = literal(Delay)

Nell'esempio seguente viene rimosso il carattere corrispondente da entrambe le estremità.

*|where trim(Command,"\") = initparams

Nell'esempio seguente viene rimosso il carattere corrispondente dall'estremità sinistra.

*|where ltrim('Error ID',0) = 76890

Nell'esempio seguente viene rimosso il carattere corrispondente dall'estremità destra.

*|where rtrim('OS Process ID',2) = 3123

Nell'esempio seguente viene confrontato la stringa Start Time con 1/1/18 nel formato data MM/dd/yy.

*|where 'Start Time' > toDate('1/1/18', 'MM/dd/yy')

Nell'esempio seguente viene calcolata la differenza tra i valori End Time e Start Time e viene confrontata la stringa con la durata di 0:0:45.

*|where 'End Time' - 'Start Time' > toDuration('0:0:45') 

L'esempio seguente specifica il formato della durata come 0:0:45.000.

*|where formatDuration('End Time' - 'Start Time') = '0:0:45.000'

Gli esempi riportati di seguito illustrano l'uso delle funzioni di data.

*|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

Nell'esempio seguente viene calcolata la posizione di .com nella stringa uri e viene valutato se non è uguale a -1.

*| where indexOf(uri, '.com') != -1

È possibile utilizzare le funzioni hash md5, sha1, sha256 e sha512 con il comando where per filtrare i dati di log. Nell'esempio seguente viene valutato se il valore del campo user è md5("jack").

*|where user = md5("jack")

Il comando seguente separa il contenuto del campo entità in due parti. Ad esempio, il valore dell'entità host-phx-1.oraclevcn.com con pattern viene suddiviso in due campi virtuali denominati Host e Dominio, con il valore del dominio oraclevcn.com:

* | extract field = Entity '(?P<Host>\w+)\.?(?P<Domain>.*)'
 | where contains(Domain, 'oraclevcn.com')
 | timestats count as logrecords by 'Log Source'

Il comando seguente calcola la distanza (in miglia) tra due coppie di coordinate lat-long specificate in gradi, quando i valori di input sono numeri e controlla se tale distanza è maggiore di 1000:

* | where distance(lat1, long1, lat2, long2) > 1000 

Il comando seguente calcola la distanza (in miglia) tra due coppie di coordinate lat-long (in gradi), quando i valori di input sono due stringhe e verifica se tale distanza è maggiore di 1000:

* | where distance('lat1,long1', 'lat2,long2') > 1000