parse-kv-operator
Gäller för: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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:
- Angiven avgränsare: Extrahering baserat på angivna avgränsare som avgör hur nycklar/värden och par separeras från varandra.
- Icke-angiven avgränsare: Extrahering utan att behöva ange avgränsare. Icke-numeriska tecken betraktas som avgränsare.
- Regex: Extrahering baserat på reguljära uttryck.
Syntax
Angiven avgränsare
T|
parse-kv
expressionas
(
KeysList)
with
(
pair_delimiter
=
PairDelimiter,
kv_delimiter
=
KvDelimiter [,
quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] [,
greedy
=
true
] )
Ospecificerad avgränsare
T|
parse-kv
Expressionas
(
KeysList)
with
(
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] )
Regex
T|
parse-kv
expressionas
(
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 |