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:
- Angegebenes Delimeter: Extraktion basierend auf angegebenen Trennzeichen, die vorschreiben, wie Schlüssel/Werte und Paare voneinander getrennt werden.
- Nicht angegebenes Delimeter: Extraktion ohne Angabe von Trennzeichen. Jedes nichtalphanumerische Zeichen wird als Trennzeichen betrachtet.
- Regex: Extraktion basierend auf regulären Ausdrücken.
Syntax
Angegebenes Delimeter
T|
parse-kv
Ausdruckas
(
KeysList)
with
(
pair_delimiter
=
PairDelimiter,
kv_delimiter
=
KvDelimiter [,
quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] [,
greedy
=
true
] )
Nicht angegebenes Trennzeichen
T|
parse-kv
Ausdruckas
(
KeysList)
with
(
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] )
RegEx
T|
parse-kv
Ausdruckas
(
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 |
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für