Dela via


parse-kv-operator

Gäller för: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

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 avgränsare

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

Ospecificerad avgränsare

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

Regex

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

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Krävs Beskrivning
uttryck string ✔️ Uttrycket som nyckelvärdena ska extraheras från.
KeysList string ✔️ En kommaavgränsad lista över nyckelnamn och deras värdedatatyper. Nycklarnas ordning behöver inte matcha ordningen i vilken 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.

Returnerar

Det ursprungliga tabelluttrycket för indata T, utökat med kolumner per angivna nycklar som ska extraheras.

Not

  • 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 du extraherar nycklar och värden ignoreras inledande och avslutande blanksteg.

Exempel

Exemplen i det här avsnittet visar hur du använder syntaxen för att komma igång.

Extrahering med väldefinierade avgränsare

I den här frågan avgränsas nycklar och värden av 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

utdata

SMS ThreadId Maskin
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. Följande exempel visar 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

utdata

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

Den här frågan använder 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

utdata

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

utdata

Tid 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å ociterade värden kan innehålla paravgränsare. I det här fallet använder du greedy läge för att ange för operatorn att söka till 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 det angivna greedy läget:

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

utdata

Namn Telefon stad
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

utdata

Namn Telefon stad
N.N 555 5555 New York

Extrahering utan väldefinierade avgränsare

I följande exempel anses alla icke-numeriska tecken vara 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

utdata

SMS ThreadId Maskin
Igång 458745723 Node001

Värden som citerar och undfly 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

utdata

SMS ThreadId Maskin
Tjänsten är igång 458745723 Node001

Extrahering med regex

När inga avgränsare definierar textstrukturen tillräckligt 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

utdata

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