operator parse-where
Dotyczy: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Oblicza wyrażenie ciągu i analizuje jego wartość w co najmniej jednej kolumnie obliczeniowej. Wynik jest tylko pomyślnie przeanalizowane ciągi.
parse-where
Analizuje ciągi w taki sam sposób jak analizowanie i filtruje ciągi, które nie zostały pomyślnie przeanalizowane.
Zobacz operator analizy, który generuje wartości null dla nieudanych analizowanych ciągów.
Składnia
T | parse-where
[kind=
kind [flags=
regexFlags]] wyrażenie with
*
(stringConstant columnName [:
columnType]) *
...
Dowiedz się więcej na temat konwencji składni.
Parametry
Nazwisko | Type | Wymagania | opis |
---|---|---|---|
T | string |
✔️ | Dane wejściowe tabelaryczne do przeanalizowania. |
rodzaj | string |
✔️ | Jedna z obsługiwanych wartości rodzajowych. Domyślna wartość to simple . |
regexFlags | string |
Jeśli rodzaj to regex , możesz określić flagi wyrażeń regularnych, które mają być używane w U przypadku niegreedycyjnego trybu m wielowierszowego, s w celu dopasowania do nowego wiersza \n i i w przypadku bez uwzględniania wielkości liter. Więcej flag można znaleźć w obszarze Flagi. |
|
wyrażenie | string |
✔️ | Wyrażenie, które daje w wyniku ciąg. |
stringConstant | string |
✔️ | Stała ciągu, dla której należy wyszukiwać i analizować. |
nazwa_kolumny | string |
✔️ | Nazwa kolumny do przypisania wartości wyodrębnionej z wyrażenia ciągu. |
columnType | string |
Wartość skalarna wskazująca typ, na który ma być konwertowana wartość. Wartość domyślna string to . |
Uwaga
- Użyj projektu , jeśli chcesz również usunąć lub zmienić nazwę niektórych kolumn.
- Użyj
*
we wzorcu, aby pominąć wartości wiadomości-śmieci. Tej wartości nie można użyć postring
kolumnie. - Wzorzec analizy może zaczynać się od kolumny ColumnName, oprócz ciąguConstant.
- Jeśli przeanalizowane wyrażenie nie jest typu
string
, zostanie przekonwertowane na typstring
.
Obsługiwane wartości typów
Text | opis |
---|---|
simple |
Jest to wartość domyślna. stringConstant jest regularną wartością ciągu, a dopasowanie jest ścisłe. Wszystkie ograniczniki ciągów powinny być wyświetlane w przeanalizowanym ciągu, a wszystkie rozszerzone kolumny muszą być zgodne z wymaganymi typami. |
regex |
stringConstant może być wyrażeniem regularnym, a dopasowanie jest ścisłe. Wszystkie ograniczniki ciągów, które mogą być wyrażeniem regularnym dla tego trybu, powinny być wyświetlane w przeanalizowanym ciągu, a wszystkie kolumny rozszerzone muszą być zgodne z wymaganymi typami. |
Tryb wyrażeń regularnych
W trybie wyrażeń regularnych analizowanie przełoży wzorzec na wyrażenie regularne i użyje wyrażeń regularnych w celu wykonania dopasowania przy użyciu grup przechwyconych numerowanych, które są obsługiwane wewnętrznie. Na przykład:
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
Wyrażenie regularne, które zostanie wygenerowane przez analizowanie wewnętrznie, to .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
został przetłumaczony na.*?
.string
został przetłumaczony na.*?
.long
został przetłumaczony na\-\d+
.
Zwraca
Tabela wejściowa, która jest rozszerzona zgodnie z listą kolumn udostępnianych operatorowi.
Uwaga
Tylko pomyślnie przeanalizowane ciągi będą znajdować się w danych wyjściowych. Ciągi, które nie pasują do wzorca, zostaną odfiltrowane.
Przykłady
Operator parse-where
zapewnia usprawniony sposób na extend
tabelę przy użyciu wielu extract
aplikacji w tym samym string
wyrażeniu. Jest to najbardziej przydatne, gdy tabela zawiera kolumnę zawierającą string
kilka wartości, które chcesz podzielić na poszczególne kolumny. Na przykład można podzielić kolumnę, która została utworzona przez instrukcję trace dla deweloperów ("printf
/"Console.WriteLine
").
Korzystanie z akcji parse
W poniższym przykładzie kolumna EventText
tabeli Traces
zawiera ciągi formularza Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
. Poniższa operacja rozszerzy tabelę o sześć kolumn: resourceName
, , sliceNumber
releaseTime
lockTime
previousLockTime
totalSlices
Month
i .Day
Niektóre ciągi nie mają pełnego dopasowania.
Przy użyciu metody parse
kolumny obliczeniowe będą miały wartości null.
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=invalid_number, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=invalid_datetime, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=invalid_number, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previouLockTime: date ")" *
| project
resourceName,
totalSlices,
sliceNumber,
lockTime,
releaseTime,
previouLockTime
Wyjście
resourceName | totalSlices | sliceNumber | lockTime | releaseTime | previousLockTime |
---|---|---|---|---|---|
PipelineScheduler | 27 | 20 | 02/17/2016 08:40:01 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
PipelineScheduler | 27 | 22 | 02/17/2016 08:41:01 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |
Korzystanie z akcji parse-where
Użycie polecenia "parse-where" spowoduje odfiltrowywanie bezskutecznie przeanalizowanych ciągów z wyniku.
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=invalid_number, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=invalid_datetime, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=invalid_number, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previousLockTime: date ")" *
| project
resourceName,
totalSlices,
sliceNumber,
lockTime,
releaseTime,
previousLockTime
Wyjście
resourceName | totalSlices | sliceNumber | lockTime | releaseTime | previousLockTime |
---|---|---|---|---|---|
PipelineScheduler | 27 | 20 | 02/17/2016 08:40:01 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
PipelineScheduler | 27 | 22 | 02/17/2016 08:41:01 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |
Tryb wyrażeń regularnych przy użyciu flag wyrażeń regularnych
Aby uzyskać wartość resourceName i totalSlices, użyj następującego zapytania:
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=11, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=44, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where kind = regex EventText with * "RESOURCENAME=" resourceName "," * "totalSlices=" totalSlices: long "," *
| project resourceName, totalSlices
Wyjście
resourceName | totalSlices |
---|---|
parse-where
z flagą wyrażeń regularnych bez uwzględniania wielkości liter
W powyższym zapytaniu w trybie domyślnym była uwzględniana wielkość liter, więc ciągi zostały pomyślnie przeanalizowane. Nie otrzymano żadnego wyniku.
Aby uzyskać wymagany wynik, uruchom polecenie parse-where
z flagą regex bez uwzględniania wielkości liter (i
).
Tylko trzy ciągi zostaną pomyślnie przeanalizowane, więc wynik to trzy rekordy (niektóre sumyWytrzymują nieprawidłowe liczby całkowite).
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=11, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=44, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where kind = regex flags=i EventText with * "RESOURCENAME=" resourceName "," * "totalSlices=" totalSlices: long "," *
| project resourceName, totalSlices
Wyjście
resourceName | totalSlices |
---|---|
PipelineScheduler | 27 |
PipelineScheduler | 27 |
PipelineScheduler | 27 |