parse-kv operátor

Kinyeri a strukturált információkat egy sztringkifejezésből, és egy kulcs/érték űrlapon jeleníti meg az információkat.

A következő kinyerési módok támogatottak:

  • Megadott deliméter: A kulcsok/értékek és párok egymástól való elválasztási módját megadó megadott határolójelek alapján történő kinyerés.
  • Nem megadott deliméter: Kinyerés határolójelek megadása nélkül. A nonalphanumerikus karakterek elválasztó karakternek minősülnek.
  • Regex: Kinyerés reguláris kifejezések alapján.

Syntax

Megadott delimeter

T|parse-kvKifejezésas(Kulcslista)with(pair_delimiter=PairDelimiter,kv_delimiter=KvDelimiter [,quote=QuoteChars ... [,escape=EscapeChar ...]] [,greedy=true] )

Nem meghatározott elválasztó

T|parse-kvKifejezésas(Kulcslista)with( [quote=QuoteChars ... [,escape=EscapeChar ...]] )

Regex

T|parse-kvKifejezésas(Kulcslista)with(regex=RegexPattern))

További információ a szintaxis konvenciókról.

Paraméterek

Név Típus Kötelező Leírás
Expression string ✔️ Az a kifejezés, amelyből kulcsértékeket szeretne kinyerni.
Kulcslista string ✔️ A kulcsnevek és érték adattípusaik vesszővel tagolt listája. A kulcsok sorrendjének nem kell egyeznie a szövegben megjelenő sorrenddel.
PairDelimiter string Egy elválasztó, amely elválasztja a kulcsértékpárokat egymástól.
KvDelimiter string Elválasztó, amely elválasztja a kulcsokat az értékektől.
Idézetdiagramok string Egy vagy két karakterből álló sztringkonstans, amely olyan nyitó és záró idézőjeleket jelöl, amelyekkel a kulcsnév vagy a kinyert érték becsomagolható. A paraméter megismételhető a nyitó/záró idézőjelek külön készletének megadásához.
EscapeChar string Egykarakterekből álló sztringkonstans, amely egy olyan karaktert ír le, amely speciális karakterek idézőjeles értékben való megjelenítéséhez használható. A paraméter többszöri feloldókarakterek használata esetén megismételhető.
RegexPattern string Egy reguláris kifejezés , amely pontosan két rögzítési csoportot tartalmaz. Az első csoport a kulcs nevét, a második pedig a kulcs értékét jelöli.

Válaszok

Az eredeti T bemeneti táblázatos kifejezés, kiterjesztve a kinyerni kívánt kulcsonkénti oszlopokkal.

Megjegyzés

  • Ha egy kulcs nem jelenik meg egy rekordban, a megfelelő oszlopérték vagy egy üres sztring lesz null az oszlop típusától függően.
  • Csak az operátorban felsorolt kulcsok lesznek kinyerve.
  • A rendszer kinyeri a kulcsok első megjelenését, és figyelmen kívül hagyja a későbbi értékeket.
  • Kulcsok és értékek kinyerésekor a rendszer figyelmen kívül hagyja a kezdő és záró szóközöket.

Példák

Kinyerés jól definiált elválasztókkal

Az alábbi példában a kulcsokat és az értékeket jól meghatározott elválasztójelek választják el egymástól. Ezek a delimeterek vessző és kettőspont karakterek.

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

Kimenet

Szöveg Szálazonosító Gép
A szolgáltatás működik 458745723 Node001

Kinyerés az érték idézésével

Néha a kulcsnevek vagy értékek idézőjelekbe vannak csomagolva, amelyek lehetővé teszik, hogy maguk az értékek elválasztó karaktereket tartalmazzanak. Az alábbi példák bemutatják, hogyan történik az quote argumentumok használata az ilyen értékek kinyerésére.

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

Kimenet

eseményidő src Dst Bájt Hiba
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 kapcsolat megszakadt

Az alábbi példa különböző nyitó és záró idézőjeleket használ:

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

Kimenet

eseményidő src Dst Bájt Hiba
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 kapcsolat megszakadt

Az értékek maguk is tartalmazhatnak megfelelően feloldott idézőjel-karaktereket, ahogy az alábbi példában látható:

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

Kimenet

time src Dst Bájt Hiba
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 a távoli gazdagép "bye!" üzenetet küldött

Kinyerés kapzsi módban

Vannak olyan esetek, amikor a nem kvótált értékek párelválasztókat tartalmazhatnak. Ebben az esetben a greedy mód használatával jelezze az operátornak, hogy az érték végének keresésekor a következő kulcs megjelenéséig (vagy sztring végéig) sztringet keressen.

Az alábbi példák összehasonlítják az operátor és a greedy megadott mód nélküli működését:

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

Kimenet

name telefon city
John 555 Új
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

Kimenet

name telefon city
John Doe 555 5555 New York

Kinyerés jól meghatározott elválasztójelek nélkül

A következő példában minden nonalphanumerikus karakter érvényes elválasztónak minősül:

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

Kimenet

Szöveg Szálazonosító Gép
Első lépések 458745723 Node001

Az idéző és a menekülő értékek ebben a módban engedélyezve lesznek az alábbi példában látható módon:

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

Kimenet

Szöveg Szálazonosító Gép
A szolgáltatás ' működik 458745723 Node001

Kinyerés regex használatával

Ha nem határoznak meg elég jól elválasztó karaktereket a szövegstruktúrában, a reguláris kifejezésalapú kinyerés hasznos lehet.

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

Kimenet

hivatkozási URL-cím kérelem URL-címe hirdető azonosítója
https://hostname.com/redirect?dest=/?h=1234 https://hostname.com/?h=1234 24fefbca-cf27-4d62-a623-249c2ad30c73