Sdílet prostřednictvím


parse-kv – operátor

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:

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