Udostępnij za pośrednictwem


operator parse-kv

Dotyczy: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Wyodrębnia informacje ustrukturyzowane z wyrażenia ciągu i reprezentuje informacje w formularzu klucza/wartości.

Obsługiwane są następujące tryby wyodrębniania:

Składnia

Określony ogranicznik

T | parse-kv Expression ( as KeysList ) pair_delimiter with ( = PairDelimiter KvDelimiter kv_delimiter , = [, = quote QuoteChars ... [, escape = EscapeChar ...]] [, greedy = true])

Ogranicznik nieokreślony

T parse-kv | Expression as ( KeysList ) ( with [quote = QuoteChars ... [, escape = EscapeChar ...]])

Wyrażenie regularne

T | parse-kv Expression ( as KeysList = ( with regex ) RegexPattern) )

Dowiedz się więcej na temat konwencji składni.

Parametry

Nazwisko Type Wymagania opis
Expression string ✔️ Wyrażenie, z którego mają być wyodrębnione wartości klucza.
KeysList string ✔️ Rozdzielona przecinkami lista nazw kluczy i ich typów danych wartości. Kolejność kluczy nie musi być zgodna z kolejnością, w jakiej są wyświetlane w tekście.
PairDelimiter string Ogranicznik oddzielający pary wartości klucza od siebie.
KvDelimiter string Ogranicznik oddzielający klucze od wartości.
QuoteChars string Literał ciągu jedno-lub dwuznakowego reprezentujący cudzysłów otwierających i zamykających, z którymi może być opakowana nazwa klucza lub wyodrębniona wartość. Parametr można powtórzyć, aby określić oddzielny zestaw cudzysłowów otwierających/zamykających.
EscapeChar string Literał ciągu jednoznakowego opisujący znak, który może być używany do ucieczki znaków specjalnych w cytowanej wartości. Parametr można powtórzyć, jeśli jest używanych wiele znaków ucieczki.
RegexPattern string Wyrażenie regularne zawierające dokładnie dwie grupy przechwytywania. Pierwsza grupa reprezentuje nazwę klucza, a druga grupa reprezentuje wartość klucza.

Zwraca

Oryginalne wejściowe wyrażenie tabelaryczne T, rozszerzone o kolumny na określone klucze do wyodrębnienia.

Uwaga

  • Jeśli klucz nie zostanie wyświetlony w rekordzie, odpowiadająca mu wartość kolumny będzie albo null ciągiem pustym, w zależności od typu kolumny.
  • Wyodrębnione są tylko klucze wymienione w operatorze.
  • Pierwszy wygląd klucza jest wyodrębniany, a kolejne wartości są ignorowane.
  • Podczas wyodrębniania kluczy i wartości wiodące i końcowe białe spacje są ignorowane.

Przykłady

Wyodrębnianie z dobrze zdefiniowanymi ogranicznikami

W poniższym przykładzie klucze i wartości są rozdzielane dobrze zdefiniowanymi ogranicznikami. Te ograniczniki są przecinkami i dwukropkami.

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

Wyjście

Text Identyfikatorwątku Maszyna
Usługa jest włączona 458745723 Node001

Wyodrębnianie z cudzysłów wartości

Czasami nazwy kluczy lub wartości są owinięte cudzysłowami, co umożliwia same wartości zawierające znaki ogranicznika. W poniższych przykładach pokazano, jak quote argument jest używany do wyodrębniania takich wartości.

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

Wyjście

czas zdarzenia src Czasu letniego B niepowodzenie
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 przerwane połączenie

W poniższym przykładzie użyto różnych cudzysłowów otwierających i zamykających:

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

Wyjście

czas zdarzenia src Czasu letniego B niepowodzenie
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 przerwane połączenie

Same wartości mogą zawierać prawidłowo znaki cudzysłowu o wartościach ucieczki, jak pokazano w poniższym przykładzie:

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

Wyjście

time src Czasu letniego B niepowodzenie
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 zdalny host wysłany "bye!"

Wyodrębnianie w trybie chciwości

Istnieją przypadki, gdy wartości bez cudzysłów mogą zawierać ograniczniki par. W takim przypadku użyj greedy trybu , aby wskazać operatorowi skanowanie do momentu następnego wyglądu klucza (lub końca ciągu) podczas wyszukiwania wartości kończącej.

W poniższych przykładach porównamy sposób działania operatora z określonym trybem i bez tego greedy trybu:

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

Wyjście

name phone miejscowość
Michał 555 Nowe
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

Wyjście

name phone miejscowość
John Doe 555 5555 Nowy Jork

Wyodrębnianie bez dobrze zdefiniowanych ograniczników

W poniższym przykładzie każdy znak niefanumeryczny jest uznawany za prawidłowy ogranicznik:

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

Wyjście

Text Identyfikatorwątku Maszyna
Rozpoczęto 458745723 Node001

Wartości cudzysłowu i ucieczki są dozwolone w tym trybie, jak pokazano w poniższym przykładzie:

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

Wyjście

Text Identyfikatorwątku Maszyna
Usługa " jest włączona 458745723 Node001

Wyodrębnianie przy użyciu wyrażenia regularnego

Jeśli ograniczniki nie definiują wystarczająco dobrze struktury tekstu, wyodrębnianie oparte na wyrażeniach regularnych może być przydatne.

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

Wyjście

adres URL referera adres URL żądania identyfikator reklamodawcy
https://hostname.com/redirect?dest=/?h=1234 https://hostname.com/?h=1234 24fefbca-cf27-4d62-a623-249c2ad30c73