parse-kv operátor
A következőkre vonatkozik: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
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 elválasztó: A kulcsok/értékek és párok egymástól való elválasztási módját megadó megadott elválasztójelek alapján történő kinyerés.
- Nem megadott elválasztó: Határolójelek megadása nélkül történő kinyerés. A nonalphanumerikus karakterek elválasztó karakternek minősülnek.
- Regex: reguláris kifejezéseken alapuló kinyerés.
Szintaxis
Megadott elválasztójel
T|
parse-kv
Expressionas
(
KeysList)
with
(
pair_delimiter
=
PairDelimiter,
kv_delimiter
=
KvDelimiter [,
quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] [,
greedy
=
true
] )
Nem meghatározott elválasztó
T|
parse-kv
Expressionas
(
KeysList)
with
(
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] )
Regex
T|
parse-kv
Expressionas
(
KeysList)
with
(
regex
=
RegexPattern)
)
További információ szintaxiskonvenciákról.
Paraméterek
Név | Típus | Szükséges | Leírás |
---|---|---|---|
Kifejezés | string |
✔️ | Az a kifejezés, amelyből kulcsértékeket szeretne kinyerni. |
KeysList | string |
✔️ | A kulcsnevek és értékük adattípusainak vesszővel tagolt listája. A kulcsok sorrendjének nem kell megegyeznie a szövegben megjelenő sorrenddel. |
PairDelimiter | string |
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. | |
QuoteChars | string |
Egy vagy két karakterből álló sztringkonstans, amely 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 |
Egy karakteres sztringkonstans, amely egy olyan karaktert ír le, amely felhasználható speciális karakterek idézőjeles értékben való meneküléséhez. A paraméter több feloldó karakter használata esetén megismételhető. | |
RegexPattern | string |
Egy reguláris kifejezés, pontosan két rögzítési csoportot tartalmaz. Az első csoport a kulcs nevét, a második csoport pedig a kulcs értékét jelöli. |
Visszatér
Az eredeti bemeneti táblázatos kifejezés T, kiterjesztve a megadott kulcsonkénti oszlopokkal.
Jegyzet
- Ha egy kulcs nem jelenik meg egy rekordban, a megfelelő oszlopérték az oszlop típusától függően
null
vagy üres sztring. - 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 kezdő és záró szóközök figyelmen kívül lesznek hagyva.
Példák
Az ebben a szakaszban szereplő példák bemutatják, hogyan használhatja a szintaxist az első lépésekhez.
Kinyerés jól definiált elválasztókkal
Ebben a lekérdezésben a kulcsokat és az értékeket jól definiált 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
kimeneti
SMS | Szálazonosító | Gép |
---|---|---|
A szolgáltatás működik | 458745723 | Node001 |
Kinyerés érték idézéssel
Előfordulhat, hogy a kulcsnevek vagy értékek idézőjelekbe vannak csomagolva, így maguk az értékek elválasztó karaktereket tartalmazhatnak. Az alábbi példák azt mutatják be, hogyan használható egy quote
argumentum 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
kimeneti
esemény ideje | Src | Dst | Bájt | kudarc |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | kapcsolat megszakadt |
Ez a lekérdezés 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
kimeneti
esemény ideje | Src | Dst | Bájt | kudarc |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | kapcsolat megszakadt |
Maguk az értékek tartalmazhatnak megfelelően feloldott idézőjeleket, ahogy az alábbi példa is mutatja:
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
kimeneti
Idő | Src | Dst | Bájt | kudarc |
---|---|---|---|---|
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 a következő kulcs megjelenéséig (vagy sztring végéig) vizsgálja meg az érték végét.
Az alábbi példák összehasonlítják, hogyan működik az operátor a megadott greedy
mód nélkül:
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
kimeneti
név | Telefon | város |
---|---|---|
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
kimeneti
név | Telefon | város |
---|---|---|
John Doe | 555 5555 | New York |
Kinyerés jól definiált elválasztókkal
Az alábbi 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
kimeneti
SMS | Szálazonosító | Gép |
---|---|---|
Kezdett | 458745723 | Node001 |
Az idéző és a menekülő értékek ebben a módban engedélyezettek 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
kimeneti
SMS | Szálazonosító | Gép |
---|---|---|
A szolgáltatás " fel van állítva | 458745723 | Node001 |
Kinyerés regex használatával
Ha nem határoznak meg elég elválasztójeleket a szövegszerkezethez, 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
kimeneti
hivatkozó URL-címe | 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 |