parse-kv – operátor
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Extrahuje strukturované informace z řetězcového výrazu a představuje informace ve formuláři klíč/hodnota.
Podporují se následující režimy extrakce:
- Zadaný delimeter: Extrakce na základě zadaných oddělovačů, které určují, jak jsou klíče/hodnoty a páry oddělené od sebe.
- Nespecifikovaný delimetr: Extrakce bez nutnosti zadávat oddělovače. Každý neosamocný znak je považován za oddělovač.
- Regulární výrazy: Extrakce na základě regulárních výrazů.
Syntaxe
Zadaný delimetr
T parse-kv
|
Expression as
(
KeysList pair_delimiter
(
=
)
with
PairDelimiter kv_delimiter
=
,
KvDelimiter [,
=
quote
QuoteChars ... [,
escape
=
EscapeChar ...]] [ ],
greedy
=
true
)
Nezadaná oddělovač
T parse-kv
|
Expression as
(
KeysList )
(
with
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]])
Regulární výraz
Výrazy as
parse-kv
|
(
T KeysList =
(
with
regex
)
RegexPattern)
)
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
Expression | string |
✔️ | Výraz, ze kterého chcete extrahovat hodnoty klíče. |
Seznam klíčů | string |
✔️ | Čárkami oddělený seznam názvů klíčů a jejich datových typů hodnot. Pořadí klíčů nemusí odpovídat pořadí, ve kterém se zobrazují v textu. |
PairDelimiter | string |
Oddělovač, který odděluje páry klíčových hodnot od sebe navzájem. | |
KvDelimiter | string |
Oddělovač, který odděluje klíče od hodnot. | |
QuoteChars | string |
Řetězcový literál s jedním nebo dvěma znaky představující levou a pravou uvozovku, kterým je název klíče nebo extrahovaná hodnota, může být zabalena. Parametr lze opakovat, aby se určila samostatná sada levých/uzavíracích uvozovek. | |
EscapeChar | string |
Řetězcový literál s jedním znakem popisující znak, který lze použít pro escaping speciálních znaků v uvozované hodnotě. Parametr se může opakovat, pokud se použije více řídicích znaků. | |
Regulární výraz | string |
Regulární výraz obsahující přesně dvě zachycené skupiny. První skupina představuje název klíče a druhá skupina představuje hodnotu klíče. |
Návraty
Původní vstupní tabulkový výraz T, rozšířený o sloupce na zadané klíče k extrakci.
Poznámka:
- Pokud se klíč v záznamu nezobrazí, odpovídající hodnota sloupce bude buď
null
prázdný, nebo prázdný řetězec v závislosti na typu sloupce. - Extrahují se jenom klíče uvedené v operátoru.
- První vzhled klíče se extrahuje a následné hodnoty se ignorují.
- Při extrahování klíčů a hodnot se úvodní a koncové prázdné mezery ignorují.
Příklady
Extrakce s dobře definovanými oddělovači
V následujícím příkladu jsou klíče a hodnoty oddělené dobře definovanými oddělovači. Tyto delimetry jsou čárkami a dvojtečky.
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
Výstup
Text | ThreadId | Počítač |
---|---|---|
Služba je v provozu | 458745723 | Node001 |
Extrakce s uvozováním hodnot
Někdy jsou názvy klíčů nebo hodnoty zabalené v uvozovkách, které umožňují, aby samotné hodnoty obsahovaly znaky oddělovače. Následující příklady ukazují, jak quote
se argument používá k extrakci těchto hodnot.
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
Výstup
čas události | src | Dst | bajtů | selhání |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | přerušeno připojení |
Následující příklad používá různé levá a pravá uvozovky:
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
Výstup
čas události | src | Dst | bajtů | selhání |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | přerušeno připojení |
Samotné hodnoty mohou obsahovat správně řídicí znaky uvozovek, jak ukazuje následující příklad:
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
Výstup
čas | src | Dst | bajtů | selhání |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | vzdálený hostitel odeslaný "bye!" |
Extrakce v režimu greedy
Existují případy, kdy necitované hodnoty mohou obsahovat oddělovače párů. V tomto případě použijte greedy
režim k označení operátora, aby se při hledání konce hodnoty prohledat až do dalšího vzhledu klíče (nebo konce řetězce).
Následující příklady porovnávají způsob fungování operátoru a bez zadaného greedy
režimu:
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
Výstup
name | telefon | city |
---|---|---|
John | 555 | Nová |
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
Výstup
name | telefon | city |
---|---|---|
Rudolf Spousta | 555 5555 | New York |
Extrakce bez dobře definovaných oddělovačů
V následujícím příkladu se každý neosamocený znak považuje za platný oddělovač:
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
Výstup
Text | ThreadId | Počítač |
---|---|---|
Zahájeno | 458745723 | Node001 |
Hodnoty uvozování a uvozování jsou v tomto režimu povolené, jak je znázorněno v následujícím příkladu:
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
Výstup
Text | ThreadId | Počítač |
---|---|---|
Služba je v provozu | 458745723 | Node001 |
Extrakce pomocí regulárního výrazu
Pokud žádné oddělovače dostatečně dobře definují strukturu textu, může být extrakce založená na regulárních výrazech užitečná.
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
Výstup
adresa URL refereru | adresa URL požadavku | id inzerenta |
---|---|---|
https://hostname.com/redirect?dest=/?h=1234 |
https://hostname.com/?h=1234 |
24fefbca-cf27-4d62-a623-249c2ad30c73 |