operator parse-kv

Extraheert gestructureerde informatie uit een tekenreeksexpressie en vertegenwoordigt de informatie in een sleutel-/waardevorm.

De volgende extractiemodi worden ondersteund:

Syntax

Opgegeven delimeter

T|parse-kvExpressieas(Sleutellijst)with(pair_delimiter=PairDelimiter,kv_delimiter=KvDelimiter [,quote=QuoteChars ... [,escape=EscapeChar ...]] [,greedy=true] )

Niet-opgegeven scheidingsteken

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

Regex

T|parse-kvExpressieas(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