Udostępnij za pośrednictwem


operator parse-where

Dotyczy: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft 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 \ni 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 stringto .

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ć po string 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 typ string.

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 , , sliceNumberreleaseTimelockTimepreviousLockTimetotalSlicesMonthi .Day

Niektóre ciągi nie mają pełnego dopasowania.

Przy użyciu metody parsekolumny 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