Condividi tramite


parse-kv operator

Si applica a: ✅Microsoft Fabric✅Azure Esplora dati Azure MonitorMicrosoft Sentinel

Estrae informazioni strutturate da un'espressione stringa e rappresenta le informazioni in formato chiave/valore.

Sono supportate le modalità di estrazione seguenti:

  • Delimeter specificato: estrazione basata su delimitatori specificati che determinano il modo in cui chiavi/valori e coppie sono separati l'uno dall'altro.
  • Delimeter non specificato: estrazione senza necessità di specificare delimitatori. Qualsiasi carattere non alfanumerico viene considerato un delimitatore.
  • Regex: estrazione basata su espressioni regolari.

Sintassi

Delimeter specificato

T parse-kv | Expression as ( KeysList pair_delimiter ( = ) with PairDelimiter kv_delimiter = , KvDelimiter [, = quote QuoteChars ... [, escape = EscapeChar ...]] [, greedy = true])

Delimitatore non specificato

T parse-kv | Expression as ( KeysList ) ( with [quote = QuoteChars ... [, escape = EscapeChar ...]])

Regex

T | parse-kv Expression ( as KeysList = ( with regex ) RegexPattern) )

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Digita Obbligatorio Descrizione
Expression string ✔️ Espressione da cui estrarre i valori della chiave.
KeysList string ✔️ Elenco delimitato da virgole dei nomi delle chiavi e dei relativi tipi di dati value. L'ordine delle chiavi non deve corrispondere all'ordine in cui vengono visualizzate nel testo.
PairDelimiter string Delimitatore che separa le coppie chiave-valore l'una dall'altra.
KvDelimiter string Delimitatore che separa le chiavi dai valori.
QuoteChars string Un valore letterale stringa di uno o due caratteri che rappresenta virgolette di apertura e chiusura con cui è possibile eseguire il wrapping del nome della chiave o del valore estratto. Il parametro può essere ripetuto per specificare un set separato di virgolette di apertura/chiusura.
EscapeChar string Valore letterale stringa di un carattere che descrive un carattere che può essere utilizzato per l'escape di caratteri speciali in un valore tra virgolette. Il parametro può essere ripetuto se vengono usati più caratteri di escape.
RegexPattern string Espressione regolare contenente due gruppi di acquisizione esattamente. Il primo gruppo rappresenta il nome della chiave e il secondo gruppo rappresenta il valore della chiave.

Valori restituiti

Espressione tabulare di input originale, estesa con colonne per ogni chiave specificata da estrarre.

Nota

  • Se una chiave non viene visualizzata in un record, il valore della colonna corrispondente sarà null o una stringa vuota, a seconda del tipo di colonna.
  • Vengono estratte solo le chiavi elencate nell'operatore .
  • Viene estratto il primo aspetto di una chiave e i valori successivi vengono ignorati.
  • Quando si estraggono chiavi e valori, gli spazi vuoti iniziali e finali vengono ignorati.

Esempi

Estrazione con delimitatori ben definiti

Nell'esempio seguente le chiavi e i valori sono separati da delimitatori ben definiti. Questi delimeter sono caratteri virgole e due punti.

print str="ThreadId:458745723, Machine:Node001, Text: The service is up, Level: Info"
| parse-kv str as (Text: string, ThreadId:long, Machine: string) with (pair_delimiter=',', kv_delimiter=':')
| project-away str

Output

Testo ThreadId Computer
Il servizio è in corso 458745723 Node001

Estrazione con virgolette di valore

A volte i nomi delle chiavi o i valori vengono racchiusi tra virgolette, che consentono ai valori stessi di contenere caratteri delimitatori. Negli esempi seguenti viene illustrato come viene usato un quote argomento per estrarre tali valori.

print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="connection aborted" "event time"=2021-01-01T10:00:54'
| parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"')
| project-away str

Output

ora dell'evento src Dst bytes failure
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 connessione interrotta

Nell'esempio seguente vengono utilizzate virgolette di apertura e chiusura diverse:

print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure=(connection aborted) (event time)=(2021-01-01 10:00:54)'
| parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='()')
| project-away str

Output

ora dell'evento src Dst bytes failure
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 connessione interrotta

I valori stessi possono contenere caratteri virgolette correttamente preceduti da caratteri di escape, come illustrato nell'esempio seguente:

print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="the remote host sent \\"bye!\\"" time=2021-01-01T10:00:54'
| parse-kv str as (['time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"', escape='\\')
| project-away str

Output

Ora src Dst bytes failure
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 l'host remoto inviato "bye!"

Estrazione in modalità greedy

Esistono casi in cui i valori non racchiusi tra virgolari possono contenere delimitatori di coppia. In questo caso, usare la greedy modalità per indicare all'operatore di analizzare fino all'aspetto della chiave successiva (o alla fine della stringa) quando si cerca il valore finale.

Gli esempi seguenti confrontano il funzionamento dell'operatore con e senza la greedy modalità specificata:

print str='name=John Doe phone=555 5555 city=New York'
| parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=')
| project-away str

Output

name phone city
John 555 Nuovo
print str='name=John Doe phone=555 5555 city=New York'
| parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=', greedy=true)
| project-away str

Output

name phone city
John Doe 555 5555 New York

Estrazione senza delimitatori ben definiti

Nell'esempio seguente qualsiasi carattere non alfanumerico viene considerato un delimitatore valido:

print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: Started"
| parse-kv str as (Text: string, ThreadId:long, Machine: string)
| project-away str

Output

Testo ThreadId Computer
Avviato 458745723 Node001

Le virgolette e l'escape dei valori sono consentite in questa modalità, come illustrato nell'esempio seguente:

print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: 'The service \\' is up'"
| parse-kv str as (Text: string, ThreadId:long, Machine: string) with (quote="'", escape='\\')
| project-away str

Output

Testo ThreadId Computer
Il servizio è in corso 458745723 Node001

Estrazione tramite regex

Quando nessun delimitatore definisce una struttura di testo abbastanza efficace, l'estrazione regolare basata su espressioni può essere utile.

print str=@'["referer url: https://hostname.com/redirect?dest=/?h=1234", "request url: https://hostname.com/?h=1234", "advertiser id: 24fefbca-cf27-4d62-a623-249c2ad30c73"]'
| parse-kv str as (['referer url']:string, ['request url']:string, ['advertiser id']: guid) with (regex=@'"([\w ]+)\s*:\s*([^"]*)"')
| project-away str

Output

URL del referer URL della richiesta ID inserzionista
https://hostname.com/redirect?dest=/?h=1234 https://hostname.com/?h=1234 24fefbca-cf27-4d62-a623-249c2ad30c73