parsa-where-operator
Gäller för: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 regex kan 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 \n och 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 efterstring
kolumn. - Parsningsmönstret kan börja med ColumnName, förutom StringConstant.
- Om det parsade uttrycket inte är av typen
string
konverteras det till typstring
.
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 ("printf
instruktionen "/"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
, Month
och Day
.
Några av strängarna har ingen fullständig matchning.
Med hjälp av parse
har 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 |