parse-kv-Operator

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-kvAusdruckas(KeysList)with(pair_delimiter=PairDelimiter,kv_delimiter=KvDelimiter [,quote=QuoteChars ... [,escape=EscapeChar ...]] [,greedy=true] )

Nicht angegebenes Trennzeichen

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

RegEx

T|parse-kvAusdruckas(KeysList)with(regex=RegexPattern))

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Typ 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 zweistelliges 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 öffnenden/schließenden Anführungszeichen anzugeben.
EscapeChar string Ein einstelliges Zeichenfolgenliteral, das ein Zeichen beschreibt, das zum Escapen von Sonderzeichen in einem Wert in Anführungszeichen verwendet werden kann. Der Parameter kann wiederholt werden, wenn mehrere Escapezeichen verwendet werden.
RegexPattern string Ein regulärer Ausdruck , der zwei genaue Erfassungsgruppen 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 Eingabeausdruck T, erweitert um Spalten pro angegebenen Schlüsseln, die extrahiert werden sollen.

Hinweis

  • Wenn ein Schlüssel in einem Datensatz nicht angezeigt wird, ist null der entsprechende Spaltenwert je nach Spaltentyp entweder 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. Bei diesen Delimetern handelt es sich um Kommas und Doppelpunkte.

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

Ausgabe

Text threadId Machine
Der Dienst ist aktiviert. 458745723 Node001

Extraktion mit Anführungszeichen

Manchmal werden Schlüsselnamen oder -werte in Anführungszeichen umschlossen, 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

Ausgabe

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 öffnende und schließende Anführungszeichen 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

Ausgabe

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 können ordnungsgemäß mit Escapezeichen versehene Anführungszeichen enthalten, 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

Ausgabe

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 werte ohne Zitate Paartrennzeichen enthalten können. Verwenden Sie in diesem Fall den greedy Modus, um anzugeben, dass der Operator beim Suchen nach dem Wert endet, bis die nächste Tastendarstellung (oder das Ende der Zeichenfolge) überprüft werden soll.

In den folgenden Beispielen wird verglichen, wie der Operator mit und ohne den greedy angegebenen Modus arbeitet:

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

Ausgabe

name phone city
John 555 Neu
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

Ausgabe

name phone city
John Doe 555 5555 New York

Extraktion ohne klar definierte Trennzeichen

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

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

Ausgabe

Text threadId Machine
Gestartet 458745723 Node001

Werte zum Anführungszeichen und Escaping sind in diesem Modus 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

Ausgabe

Text threadId Machine
Der Dienst ist aktiviert. 458745723 Node001

Extraktion mit regex

Wenn keine Trennzeichen die Textstruktur ausreichend definieren, kann eine reguläre ausdrucksbasierte Extraktion nützlich 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

Ausgabe

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