parsa-kv-operator

Extraherar strukturerad information från ett stränguttryck och representerar informationen i ett nyckel/värde-formulär.

Följande extraheringslägen stöds:

Syntax

Angiven delimeter

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

Icke-specifik avgränsare

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

Regex

T|parse-kvUttryckas(KeysList)with(regex=RegexPattern))

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Obligatorisk Beskrivning
Uttryck string ✔️ Uttrycket som nyckelvärden ska extraheras från.
KeysList string ✔️ En kommaavgränsad lista över nyckelnamn och deras värdedatatyper. Nycklarnas ordning behöver inte matcha i vilken ordning de visas i texten.
PairDelimiter string En avgränsare som separerar nyckelvärdepar från varandra.
KvDelimiter string En avgränsare som separerar nycklar från värden.
QuoteChars string En strängliteral med ett eller två tecken som representerar inledande och avslutande citattecken som nyckelnamnet eller det extraherade värdet kan omslutas med. Parametern kan upprepas för att ange en separat uppsättning inledande/avslutande citattecken.
EscapeChar string En strängliteral med ett tecken som beskriver ett tecken som kan användas för att undvika specialtecken i ett citerat värde. Parametern kan upprepas om flera escape-tecken används.
RegexPattern string Ett reguljärt uttryck som innehåller två grupper som samlar in exakt. Den första gruppen representerar nyckelnamnet och den andra gruppen representerar nyckelvärdet.

Returer

Det ursprungliga tabelluttrycket för indata T, utökat med kolumner per angivna nycklar att extrahera.

Anteckning

  • Om en nyckel inte visas i en post är motsvarande kolumnvärde antingen null eller en tom sträng, beroende på kolumntypen.
  • Endast nycklar som visas i operatorn extraheras.
  • Det första utseendet på en nyckel extraheras och efterföljande värden ignoreras.
  • När nycklar och värden extraheras ignoreras inledande och avslutande blanksteg.

Exempel

Extrahering med väldefinierade avgränsare

I följande exempel avgränsas nycklar och värden med väldefinierade avgränsare. Dessa delimetrar är kommatecken och kolontecken.

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

Resultat

Text ThreadId Dator
Tjänsten är igång 458745723 Node001

Extrahering med värdenotering

Ibland omsluts nyckelnamn eller värden med citattecken, vilket gör att själva värdena kan innehålla avgränsartecken. I följande exempel visas hur ett quote argument används för att extrahera sådana värden.

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

Resultat

händelsetid src Dst Byte Misslyckande
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 anslutningen avbröts

I följande exempel används olika inledande och avslutande citattecken:

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

Resultat

händelsetid src Dst Byte Misslyckande
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 anslutningen avbröts

Själva värdena kan innehålla korrekt undantagna citattecken, vilket visas i följande exempel:

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

Resultat

time src Dst Byte Misslyckande
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 fjärrvärden skickade "bye!"

Extrahering i girigt läge

Det finns fall då värden utan citattecken kan innehålla paravgränsare. I det här fallet använder du greedy läget för att ange för operatorn att genomsöka tills nästa nyckelutseende (eller slutet av strängen) när du letar efter värdet som slutar.

I följande exempel jämförs hur operatorn fungerar med och utan angivet greedy läge:

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

Resultat

name phone city
John 555 Ny
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

Resultat

name phone city
John Doe 555 5555 New York

Extrahering utan väldefinierade avgränsare

I följande exempel betraktas alla icke-alfanumeriska tecken som en giltig avgränsare:

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

Resultat

Text ThreadId Dator
Börjat 458745723 Node001

Värden som citerar och flyr tillåts i det här läget enligt följande exempel:

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

Resultat

Text ThreadId Dator
Tjänsten är igång 458745723 Node001

Extrahering med regex

När inga avgränsare definierar textstrukturen tillräckligt bra kan regelbunden uttrycksbaserad extrahering vara användbar.

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

Resultat

referens-URL url för begäran annonsörs-ID
https://hostname.com/redirect?dest=/?h=1234 https://hostname.com/?h=1234 24fefbca-cf27-4d62-a623-249c2ad30c73