operator parse-kv

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

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

Składnia

Określony ogranicznik

T|parse-kvWyrażenieas(KeysList)with(pair_delimiter=PairDelimiter,kv_delimiter=KvDelimiter [,quote=QuoteChars ... [,escape=EscapeChar ...]] [,greedy=true] )

Ogranicznik nieokreślony

T|parse-kvWyrażenieas(KeysList)with( [quote=QuoteChars ... [,escape=EscapeChar ...]] )

Regex

T|parse-kvWyrażenieas(KeysList)with(regex=RegexPattern))

Dowiedz się więcej o konwencjach składniowych.

Parametry

Nazwa Typ Wymagane Opis
Wyrażenie 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 klucz-wartość od siebie.
KvDelimiter string Ogranicznik oddzielający klucze od wartości.
QuoteChars string Literał ciągu jedno-lub dwuznakowego reprezentujący cudzysłowy otwierające i zamykające nazwę klucza lub wyodrębnionej wartości mogą być opakowane. 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 dane 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 null albo 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

Dane wyjściowe

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

Wyodrębnianie z cudzysłów wartości

Czasami nazwy kluczy lub wartości są opakowane w cudzysłów, co pozwala na 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

Dane wyjściowe

czas zdarzenia src Czasu letniego Bajtów Awarii
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

Dane wyjściowe

czas zdarzenia src Czasu letniego Bajtów Awarii
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

Dane wyjściowe

time src Czasu letniego Bajtów Awarii
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, aby przeskanować do momentu następnego wyglądu klucza (lub końca ciągu) podczas wyszukiwania końca wartości.

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

Dane wyjściowe

name phone city
Michał 555 Nowy
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

Dane wyjściowe

name phone city
Jan Kowalski 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

Dane wyjściowe

Tekst Identyfikatorwątku Maszyna
Rozpoczęto 458745723 Node001

Wartości cudzysłowujące i uciekające 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

Dane wyjściowe

Tekst 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

Dane wyjściowe

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