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:
- Określony ogranicznik: wyodrębnianie na podstawie określonych ograniczników, które określają, jak klucze/wartości i pary są oddzielone od siebie.
- Nieokreślony ogranicznik: wyodrębnianie bez konieczności określania ograniczników. Każdy znak niefanumeryczny jest uznawany za ogranicznik.
- Wyrażenie regularne: wyodrębnianie na podstawie wyrażeń regularnych.
Składnia
Określony ogranicznik
T|
parse-kv
Wyrażenieas
(
KeysList)
with
(
pair_delimiter
=
PairDelimiter,
kv_delimiter
=
KvDelimiter [,
quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] [,
greedy
=
true
] )
Ogranicznik nieokreślony
T|
parse-kv
Wyrażenieas
(
KeysList)
with
(
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] )
Regex
T|
parse-kv
Wyraż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 |
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla