Delen via


parse-kv-operator

Van toepassing op: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel-

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

De volgende extractiemodi worden ondersteund:

Syntaxis

Opgegeven scheidingsteken

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

Niet-opgegeven scheidingsteken

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

Regex

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