parse-where-operatorn
Utvärderar ett stränguttryck och parsar dess värde till en eller flera beräknade kolumner. Resultatet är bara de parsade strängarna.
parse-where
parsar strängarna på samma sätt som parsa och filtrerar bort strängar som inte parsats korrekt.
Se parsningsoperatorn, som genererar null-värde för felaktigt parsade strängar.
Syntax
T| parse-where
[kind=
kind [flags=
regexFlags]] expressionwith
*
(stringConstantcolumnName [:
columnType]) *
...
Läs mer om syntaxkonventioner.
Parametrar
Namn | Typ | Obligatorisk | Beskrivning |
---|---|---|---|
T | string |
✔️ | Tabellindata som ska parsas. |
Typ | string |
✔️ | Ett av de typvärden som stöds. Standardvärdet är simple . |
regexFlags | string |
Om typen är regex kan du ange regexflaggor som ska användas som U för odjur, m för flerradsläge, s för matchning av ny rad \n och i för skiftlägesokänsligt. Fler flaggor finns i Flaggor. |
|
expression | 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 . |
Anteckning
- Använd projektet 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
kolumnen. - Parsningsmönstret kan börja med ColumnName, förutom StringConstant.
- Om det parsade uttrycket inte är av typen
string
konverteras det till typenstring
.
Typvärden som stöds
Text | Description |
---|---|
simple |
Detta är standardvärdet. stringConstant är ett vanligt strängvärde och matchningen är strikt. Alla strängavgränsare ska visas i den tolkade 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 insamlade grupper som hanteras internt. Exempel:
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
Regex som genereras av parsningen internt är .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
översattes till.*?
.string
översattes till.*?
.long
översattes till\-\d+
.
Returer
Indatatabellen, som utökas enligt listan över kolumner som tillhandahålls till operatorn.
Anteckning
Endast parsade strängar kommer att finnas i utdata. Strängar som inte matchar mönstret filtreras bort.
Exempel
Operatorn parse-where
ger en smidigare metod för extend
en tabell med hjälp av flera extract
program i samma string
uttryck. Det här ä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årningssats ("printf
/"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
Resultat
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 strängar som inte har parsats bort 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
Resultat
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
Resultat
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ägesokänslig (i
) regex-flagga.
Endast tre strängar parsas korrekt, så resultatet är tre poster (vissa totalSlices har 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
Resultat
resourceName | totalSlices |
---|---|
PipelineScheduler | 27 |
PipelineScheduler | 27 |
PipelineScheduler | 27 |
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för