operator parse-kv
Dotyczy: ✅Microsoft Fabric✅✅
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.
- ogranicznik nieokreślony: 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
Expressionas
(
KeysList)
with
(
kv_delimiter
=
[,
quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] [,
greedy
=
true
])
Ogranicznik nieokreślony
T|
parse-kv
Expressionas
(
KeysList)
with
(
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]])
Wyrażenie regularne
T|
parse-kv
Expressionas
(
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 jest wyświetlany w rekordzie, odpowiadająca mu wartość kolumny jest
null
lub pusty ciąg, 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
W przykładach w tej sekcji pokazano, jak używać składni, aby ułatwić rozpoczęcie pracy.
Wyodrębnianie z dobrze zdefiniowanymi ogranicznikami
W tym zapytaniu 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 |
To zapytanie używa 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ącej 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 |