operator parse-kv
Extraheert gestructureerde informatie uit een tekenreeksexpressie en vertegenwoordigt de informatie in een sleutel-/waardevorm.
De volgende extractiemodi worden ondersteund:
- Opgegeven delimeter: extractie op basis van opgegeven scheidingstekens die bepalen hoe sleutels/waarden en paren van elkaar worden gescheiden.
- Niet-opgegeven delimeter: extractie zonder scheidingstekens op te geven. Elk niet-alfamatisch teken wordt beschouwd als een scheidingsteken.
- Regex: extractie op basis van reguliere expressies.
Syntax
Opgegeven delimeter
T|
parse-kv
Expressieas
(
Sleutellijst)
with
(
pair_delimiter
=
PairDelimiter,
kv_delimiter
=
KvDelimiter [,
quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] [,
greedy
=
true
] )
Niet-opgegeven scheidingsteken
T|
parse-kv
Expressieas
(
Sleutellijst)
with
(
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] )
Regex
T|
parse-kv
Expressieas
(
Sleutellijst)
with
(
regex
=
RegexPatroon)
)
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
Expression | string |
✔️ | De expressie waaruit sleutelwaarden moeten worden geëxtraheerd. |
Sleutellijst | string |
✔️ | Een door komma's gescheiden lijst met sleutelnamen en hun 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 van waarden scheidt. | |
QuoteChars | string |
Een letterlijke tekenreeks van één of twee tekens die het openen en sluiten van aanhalingstekens vertegenwoordigt waarmee 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 van één teken die een teken beschrijft dat kan worden gebruikt voor het ontsnappen van speciale tekens in een aanhalingstekenwaarde. De parameter kan worden herhaald als er meerdere escape-tekens worden gebruikt. | |
RegexPatroon | string |
Een reguliere expressie met twee groepen die precies worden vastgelegd. De eerste groep vertegenwoordigt de sleutelnaam en de tweede groep vertegenwoordigt de sleutelwaarde. |
Retouren
De oorspronkelijke tabellaire invoerexpressie T, uitgebreid met kolommen per opgegeven sleutels om te extraheren.
Notitie
- Als een sleutel niet in een record wordt weergegeven, is
null
de bijbehorende kolomwaarde of een lege tekenreeks, afhankelijk van het kolomtype. - Alleen sleutels die in de operator worden vermeld, worden geëxtraheerd.
- De eerste weergave van een sleutel wordt geëxtraheerd en de volgende waarden worden genegeerd.
- Bij het extraheren van sleutels en waarden worden voorloop- en volgspaties genegeerd.
Voorbeelden
Extractie met goed gedefinieerde scheidingstekens
In het volgende voorbeeld worden sleutels en waarden gescheiden door goed gedefinieerde scheidingstekens. Deze delimeters bestaan uit komma's 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
Tekst | ThreadId | Machine |
---|---|---|
De service is ingeschakeld | 458745723 | Node001 |
Extractie met waardequote
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 het volgende voorbeeld 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 heeft 'tot ziens! |
Extractie in hebzuchtige modus
Er zijn gevallen waarin waarden zonder aanhalingstekens paar scheidingstekens kunnen bevatten. Gebruik in dit geval de greedy
modus om aan te geven dat de operator moet scannen tot de volgende sleutelweergave (of het einde van tekenreeks) bij het zoeken naar het einde van de waarde.
In de volgende voorbeelden wordt vergeleken hoe de operator werkt met en zonder de greedy
opgegeven 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 | city |
---|---|---|
Jan | 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 | city |
---|---|---|
Jan de Vries | 555 5555 | New York |
Extractie zonder goed gedefinieerde scheidingstekens
In het volgende voorbeeld wordt elk niet-fanumerisch 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
Tekst | ThreadId | Machine |
---|---|---|
Gestart | 458745723 | Node001 |
Waarden citeren en escapen 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
Tekst | ThreadId | Machine |
---|---|---|
De service is ingeschakeld | 458745723 | Node001 |
Extractie met behulp van regex
Wanneer de tekststructuur goed genoeg wordt gedefinieerd door geen scheidingstekens, 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 |
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor