Parse-kv-Operator
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
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 diktieren, 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
|
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 |