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:
- Angiven delimeter: Extrahering baserat på angivna avgränsare som avgör hur nycklar/värden och par separeras från varandra.
- Icke-angiven delimeter: Extrahering utan att du behöver ange avgränsare. Icke-numeriska tecken betraktas som avgränsare.
- Regex: Extrahering baserat på reguljära uttryck.
Syntax
Angiven delimeter
T|
parse-kv
Uttryckas
(
KeysList)
with
(
pair_delimiter
=
PairDelimiter,
kv_delimiter
=
KvDelimiter [,
quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] [,
greedy
=
true
] )
Icke-specifik avgränsare
T|
parse-kv
Uttryckas
(
KeysList)
with
(
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] )
Regex
T|
parse-kv
Uttryckas
(
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 |
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för