Dela via


parsa-where-operator

Gäller för: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

Utvärderar ett stränguttryck och parsar dess värde i en eller flera beräknade kolumner. Resultatet är bara de parsade strängarna.

parse-where parsar strängarna på samma sätt som parsaoch filtrerar bort strängar som inte parsats korrekt.

Se parsningsoperator, som genererar null-värden för misslyckade parsade strängar.

Syntax

T| parse-where [kind=typ [flags=regexFlags]] uttryckwith* (stringConstantcolumnName [:columnType]) *...

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Krävs Beskrivning
T string ✔️ Tabellindata som ska parsas.
typ string ✔️ Ett av de typvärden som stöds. Standardvärdet är simple.
regexFlags string Om typ är regexkan du ange regex-flaggor som ska användas som U för okänslig, m för flerradsläge, s för matchning av ny rad \noch i för skiftlägesokänsligt. Fler flaggor finns i Flags.
uttryck string ✔️ Ett uttryck som utvärderas till en sträng.
stringConstant string ✔️ En strängkonstant som du vill söka efter och parsa för.
columnName string ✔️ Namnet på en kolumn som du vill tilldela ett värde till, extraherat från stränguttrycket.
columnType string Det skalära värdet som anger vilken typ som värdet ska konverteras till. Standardvärdet är string.

Not

  • Använd projekt om du också vill släppa eller byta namn på vissa kolumner.
  • Använd * i mönstret för att hoppa över skräpvärden. Det här värdet kan inte användas efter string kolumn.
  • Parsningsmönstret kan börja med ColumnName, förutom StringConstant.
  • Om det parsade uttrycket inte är av typen stringkonverteras det till typ string.

Typvärden som stöds

SMS Beskrivning
simple Det här är standardvärdet. stringConstant är ett vanligt strängvärde och matchningen är strikt. Alla strängavgränsare ska visas i den parsade strängen och alla utökade kolumner måste matcha de typer som krävs.
regex stringConstant kan vara ett reguljärt uttryck och matchningen är strikt. Alla strängavgränsare, som kan vara en regex för det här läget, bör visas i den tolkade strängen och alla utökade kolumner måste matcha de typer som krävs.

Regex-läge

I regex-läge översätter parsningen mönstret till en regex och använder reguljära uttryck för att utföra matchningen med hjälp av numrerade grupper som hanteras internt. Till exempel:

parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long

Den regex som genereras av parsningen internt är .*?<regex1>(.*?)<regex2>(\-\d+).

  • * översattes till .*?.
  • string översattes till .*?.
  • long översattes till \-\d+.

Returnerar

Indatatabellen, som utökas enligt listan över kolumner som tillhandahålls till operatorn.

Not

Endast parsade strängar kommer att finnas i utdata. Strängar som inte matchar mönstret filtreras bort.

Exempel

Exemplen i det här avsnittet visar hur du använder syntaxen för att komma igång.

Exemplen i den här artikeln använder offentligt tillgängliga tabeller i hjälpkluster, till exempel tabellen StormEvents i databasen Samples.

Exemplen i den här artikeln använder offentligt tillgängliga tabeller, till exempel tabellen StormEvents i Väderanalys exempeldata.

Operatorn parse-where ger ett effektivt sätt att extend en tabell med hjälp av flera extract program på samma string uttryck. Detta är mest användbart när tabellen har en string kolumn som innehåller flera värden som du vill dela upp i enskilda kolumner. Du kan till exempel dela upp en kolumn som har skapats av en utvecklarspårning ("printfinstruktionen "/"Console.WriteLine").

Använda parse

I exemplet nedan innehåller kolumnen EventText i tabellen Traces strängar i formuläret Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5}). Åtgärden nedan utökar tabellen med sex kolumner: resourceName , totalSlices, sliceNumber, lockTime, releaseTime, previousLockTime, Monthoch Day.

Några av strängarna har ingen fullständig matchning.

Med hjälp av parsehar de beräknade kolumnerna nullvärden.

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

utdata

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

Använda parse-where

Om du använder "parsa-where" filtreras bort utan framgång parsade strängar från resultatet.

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

utdata

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

Regex-läge med regex-flaggor

Om du vill hämta resourceName och totalSlices använder du följande fråga:

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

utdata

resourceName totalSlices

parse-where med skiftlägesokänslig regex-flagga

I ovanstående fråga var standardläget skiftlägeskänsligt, så strängarna parsades korrekt. Inget resultat erhölls.

För att få det nödvändiga resultatet kör du parse-where med en skiftlägeskänslig (i) regex-flagga.

Endast tre strängar parsas korrekt, så resultatet är tre poster (vissa totalSlices innehåller ogiltiga heltal).

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

utdata

resourceName totalSlices
PipelineScheduler 27
PipelineScheduler 27
PipelineScheduler 27