parse-kv operator
Si applica a: ✅Microsoft Fabric✅Azure Esplora dati✅ Azure Monitor✅Microsoft 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 |