parse-kv-operator
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel-
Extraheert gestructureerde informatie uit een tekenreeksexpressie en vertegenwoordigt de informatie in een sleutel-waardeformulier.
De volgende extractiemodi worden ondersteund:
- Opgegeven scheidingsteken: Extractie op basis van opgegeven scheidingstekens die bepalen hoe sleutels/waarden en paren van elkaar worden gescheiden.
- niet-opgegeven scheidingsteken: extractie zonder scheidingstekens op te geven. Elk niet-phanumerisch teken wordt beschouwd als een scheidingsteken.
- Regex-: Extractie op basis van reguliere expressies.
Syntaxis
Opgegeven scheidingsteken
T|
parse-kv
Expressionas
(
KeysList)
with
(
pair_delimiter
=
PairDelimiter,
kv_delimiter
=
KvDelimiter [,
quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] [,
greedy
=
true
] )
Niet-opgegeven scheidingsteken
T|
parse-kv
Expressionas
(
KeysList)
with
(
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] )
Regex
T|
parse-kv
Expressionas
(
KeysList)
with
(
regex
=
RegexPattern)
)
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
Expressie- | string |
✔️ | De expressie waaruit sleutelwaarden moeten worden geëxtraheerd. |
KeysList | string |
✔️ | Een door komma's gescheiden lijst met sleutelnamen en de bijbehorende waardegegevenstypen. De volgorde van de sleutels hoeft niet overeen te komen met de volgorde waarin ze in de tekst worden weergegeven. |
PairDelimiter- | string |
Een scheidingsteken waarmee sleutelwaardeparen van elkaar worden gescheiden. | |
KvDelimiter- | string |
Een scheidingsteken dat sleutels scheidt van waarden. | |
QuoteChars- | string |
Een letterlijke tekenreeks van één of twee tekens die aangeeft dat de sleutelnaam of de geëxtraheerde waarde kan worden verpakt. De parameter kan worden herhaald om een afzonderlijke set aanhalingstekens voor openen/sluiten op te geven. | |
EscapeChar- | string |
Een letterlijke tekenreeks met één tekenreeks die een teken beschrijft dat kan worden gebruikt voor het ontsnappen van speciale tekens in een aanhalingstekens. De parameter kan worden herhaald als er meerdere escapetekens worden gebruikt. | |
RegexPattern- | string |
Een reguliere expressie met twee vastleggende groepen precies. De eerste groep vertegenwoordigt de sleutelnaam en de tweede groep vertegenwoordigt de sleutelwaarde. |
Retourneert
De oorspronkelijke tabellaire invoerexpressie T, uitgebreid met kolommen per opgegeven sleutels om te extraheren.
Notitie
- Als een sleutel niet wordt weergegeven in een record, is de bijbehorende kolomwaarde
null
of een lege tekenreeks, afhankelijk van het kolomtype. - Alleen sleutels die in de operator worden vermeld, worden geëxtraheerd.
- Het eerste uiterlijk van een sleutel wordt geëxtraheerd en de volgende waarden worden genegeerd.
- Wanneer u sleutels en waarden extraheert, worden voorloop- en volgspaties genegeerd.
Voorbeelden
In de voorbeelden in deze sectie ziet u hoe u de syntaxis kunt gebruiken om aan de slag te gaan.
Extractie met goed gedefinieerde scheidingstekens
In deze query worden sleutels en waarden gescheiden door goed gedefinieerde scheidingstekens. Deze delimeters zijn komma' en dubbele punttekens.
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
uitvoer
Sms | ThreadId | Machine |
---|---|---|
De service is up | 458745723 | Node001 |
Extractie met quotatie van waarden
Soms worden sleutelnamen of -waarden tussen aanhalingstekens geplaatst, waardoor de waarden zelf scheidingstekens kunnen bevatten. In de volgende voorbeelden ziet u hoe een quote
argument wordt gebruikt voor het extraheren van dergelijke waarden.
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
uitvoer
gebeurtenistijd | Src | Dst | Bytes | mislukking |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | verbinding afgebroken |
In deze query worden verschillende aanhalingstekens voor openen en sluiten gebruikt:
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
uitvoer
gebeurtenistijd | Src | Dst | Bytes | mislukking |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | verbinding afgebroken |
De waarden zelf kunnen correct escape-aanhalingstekens bevatten, zoals in het volgende voorbeeld wordt weergegeven:
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
uitvoer
Tijd | Src | Dst | Bytes | mislukking |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | de externe host verzonden 'bye!' |
Extractie in hebzuchtige modus
Er zijn gevallen waarin niet-aanhalingstekens kunnen bevatten. In dit geval gebruikt u de greedy
-modus om aan te geven dat de operator moet scannen totdat de volgende sleutelweergave (of het einde van de tekenreeks) op zoek is naar de waarde die eindigt.
De volgende voorbeelden vergelijken de werking van de operator met en zonder de opgegeven greedy
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
uitvoer
naam | Telefoon | stad |
---|---|---|
John | 555 | Nieuw |
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
uitvoer
naam | Telefoon | stad |
---|---|---|
John Doe | 555 5555 | New York |
Extractie zonder goed gedefinieerde scheidingstekens
In het volgende voorbeeld wordt elk niet-phanumerisch teken beschouwd als een geldig scheidingsteken:
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
uitvoer
Sms | ThreadId | Machine |
---|---|---|
Begon | 458745723 | Node001 |
Waarden voor quoteren en ontsnappen zijn toegestaan in deze modus, zoals wordt weergegeven in het volgende voorbeeld:
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
uitvoer
Sms | ThreadId | Machine |
---|---|---|
De service is up | 458745723 | Node001 |
Extractie met regex
Wanneer er geen scheidingstekens voldoende tekststructuur definiëren, kan reguliere extractie op basis van expressies nuttig zijn.
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
uitvoer
referer-URL | aanvraag-URL | adverteerders-id |
---|---|---|
https://hostname.com/redirect?dest=/?h=1234 |
https://hostname.com/?h=1234 |
24fefbca-cf27-4d62-a623-249c2ad30c73 |