Parse-kv-Operator

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Extrahiert strukturierte Informationen aus einem Zeichenfolgenausdruck und stellt die Informationen in Form eines Schlüssels/Werts dar.

Die folgenden Extraktionsmodi werden unterstützt:

Syntax

Angegebenes Delimeter

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

Nicht angegebene Trennzeichen

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

RegEx

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

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich Beschreibung
Ausdruck string ✔️ Der Ausdruck, aus dem Schlüsselwerte extrahiert werden sollen.
KeysList string ✔️ Eine durch Trennzeichen getrennte Liste von Schlüsselnamen und deren Wertdatentypen. Die Reihenfolge der Tasten muss nicht mit der Reihenfolge übereinstimmen, in der sie im Text angezeigt werden.
PairDelimiter string Ein Trennzeichen, das Schlüsselwertpaare voneinander trennt.
KvDelimiter string Ein Trennzeichen, das Schlüssel von Werten trennt.
QuoteChars string Ein ein- oder zweistellige Zeichenfolgenliteral, das öffnende und schließende Anführungszeichen darstellt, mit denen der Schlüsselname oder der extrahierte Wert umschlossen werden kann. Der Parameter kann wiederholt werden, um einen separaten Satz von Öffnen-/Schließen-Anführungszeichen anzugeben.
EscapeChar string Ein einstellige Zeichenfolgenliteral, das ein Zeichen beschreibt, das verwendet werden kann, um Sonderzeichen in einem an zitierten Wert zu entfernen. Der Parameter kann wiederholt werden, wenn mehrere Escapezeichen verwendet werden.
RegexPattern string Ein regulärer Ausdruck , der genau zwei Aufnahmegruppen enthält. Die erste Gruppe stellt den Schlüsselnamen dar, und die zweite Gruppe stellt den Schlüsselwert dar.

Gibt zurück

Der ursprüngliche tabellarische Ausdruck T, erweitert mit Spalten pro angegebenen Schlüsseln, die extrahiert werden sollen.

Hinweis

  • Wenn ein Schlüssel nicht in einem Datensatz angezeigt wird, ist null der entsprechende Spaltenwert je nach Spaltentyp entweder eine leere Zeichenfolge oder eine leere Zeichenfolge.
  • Es werden nur Schlüssel extrahiert, die im Operator aufgeführt sind.
  • Die erste Darstellung eines Schlüssels wird extrahiert, und nachfolgende Werte werden ignoriert.
  • Beim Extrahieren von Schlüsseln und Werten werden führende und nachfolgende Leerzeichen ignoriert.

Beispiele

Extraktion mit klar definierten Trennzeichen

Im folgenden Beispiel werden Schlüssel und Werte durch klar definierte Trennzeichen getrennt. Diese Delimeter sind Komma- und Doppelpunktzeichen.

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

Text ThreadId Machine
Der Dienst ist aktiviert. 458745723 Node001

Extraktion mit Wert quoting

Manchmal werden Schlüsselnamen oder Werte in Anführungszeichen eingeschlossen, sodass die Werte selbst Trennzeichen enthalten können. Die folgenden Beispiele zeigen, wie ein quote Argument zum Extrahieren solcher Werte verwendet wird.

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

Ereigniszeit src dst Byte failure
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 Verbindung abgebrochen

Im folgenden Beispiel werden verschiedene Eröffnungs- und Schlusskommazeichen verwendet:

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

Ereigniszeit src dst Byte failure
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 Verbindung abgebrochen

Die Werte selbst enthalten möglicherweise richtig escapefähige Anführungszeichen, wie im folgenden Beispiel gezeigt:

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

time src dst Byte failure
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 der Remotehost hat "bye!" gesendet.

Extraktion im gierigen Modus

Es gibt Fälle, in denen nicht angesetzte Werte Paartrennzeichen enthalten können. Verwenden Sie in diesem Fall den greedy Modus, um anzugeben, dass der Operator beim Suchen nach dem Ende des Werts die nächste Tastendarstellung (oder das Ende der Zeichenfolge) durchsucht.

Die folgenden Beispiele vergleichen die Funktionsweise des Operators mit und ohne den greedy angegebenen Modus:

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 Ort
John 555 Neue
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 Ort
Max Mustermann 555 5555 New York

Extraktion ohne klar definierte Trennzeichen

Im folgenden Beispiel gilt jedes nichtalphanumerische Zeichen als gültiges Trennzeichen:

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

Text ThreadId Machine
Gestartet 458745723 Node001

Werte, die in diesem Modus zitiert und ausgelassen werden, sind zulässig, wie im folgenden Beispiel gezeigt:

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

Text ThreadId Machine
Der Dienst ist aktiviert. 458745723 Node001

Extraktion mit regex

Wenn keine Trennzeichen die Textstruktur gut genug definieren, kann die reguläre ausdrucksbasierte Extraktion hilfreich sein.

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

Referenz-URL Anforderungs-URL Werbekunden-ID
https://hostname.com/redirect?dest=/?h=1234 https://hostname.com/?h=1234 24fefbca-cf27-4d62-a623-249c2ad30c73