operator parse-kv
Dotyczy: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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:
- 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 uważany za ogranicznik.
- Wyrażenie regularne: wyodrębnianie na podstawie wyrażeń regularnych.
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
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 |