operator parse-where
Evalueert een tekenreeksexpressie en parseert de waarde ervan in een of meer berekende kolommen. Het resultaat is alleen de tekenreeksen die zijn geparseerd.
parse-where
parseert de tekenreeksen op dezelfde manier als parseren en filtert tekenreeksen die niet zijn geparseerd.
Zie de parseeroperator, die null-waarden produceert voor niet-geparseerde tekenreeksen.
Syntax
T| parse-where
[kind=
soort [flags=
regexFlags]] expressionwith
*
(stringConstantcolumnName [:
columnType]) *
...
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
T | tekenreeks | ✓ | De tabellaire invoer die moet worden geparseerd. |
Soort | tekenreeks | ✓ | Een van de ondersteunde soortwaarden. De standaardwaarde is simple . |
regexFlags | tekenreeks | Als soort is regex , kunt u regex-vlaggen opgeven die moeten worden gebruikt, zoals U voor ongegreedy, m voor de modus met meerdere regels, s voor overeenkomende nieuwe regel \n en i voor hoofdlettergevoelig. Meer vlaggen vindt u in RE2-vlaggen. |
|
expression | tekenreeks | ✓ | Een expressie die resulteert in een tekenreeks. |
stringConstant | tekenreeks | ✓ | Een tekenreeksconstante waarnaar moet worden gezocht en geparseerd. |
columnName | tekenreeks | ✓ | De naam van een kolom waaraan een waarde moet worden toegewezen, geëxtraheerd uit de tekenreeksexpressie. |
columnType | tekenreeks | De scalaire waarde die het type aangeeft waarnaar de waarde moet worden geconverteerd. De standaardwaarde is de string . |
Notitie
- Gebruik project als u ook bepaalde kolommen wilt verwijderen of de naam ervan wilt wijzigen.
- Gebruik
*
in het patroon om ongewenste waarden over te slaan. Deze waarde kan niet worden gebruikt nastring
kolom. - Het patroon parseren kan beginnen met ColumnName, naast StringConstant.
- Als de geparseerde expressie niet van het type
string
is, wordt deze geconverteerd naar het typestring
.
Ondersteunde soortwaarden
Tekst | Beschrijving |
---|---|
simple |
Dit is de standaardwaarde. stringConstant is een normale tekenreekswaarde en de overeenkomst is strikt. Alle tekenreeksscheidingstekens moeten worden weergegeven in de geparseerde tekenreeks en alle uitgebreide kolommen moeten overeenkomen met de vereiste typen. |
regex |
stringConstant kan een reguliere expressie zijn en de overeenkomst is strikt. Alle tekenreeksscheidingstekens, die een regex voor deze modus kunnen zijn, moeten worden weergegeven in de geparseerde tekenreeks en alle uitgebreide kolommen moeten overeenkomen met de vereiste typen. |
Regex-modus
In de regex-modus vertaalt parse het patroon naar een regex en gebruikt re2-syntaxis om de matching uit te voeren met behulp van genummerde vastgelegde groepen die intern worden verwerkt. Bijvoorbeeld:
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
De regex die intern wordt gegenereerd door de parse is .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
is vertaald naar.*?
.string
is vertaald naar.*?
.long
is vertaald naar\-\d+
.
Retouren
De invoertabel, die wordt uitgebreid volgens de lijst met kolommen die aan de operator worden verstrekt.
Notitie
Alleen tekenreeksen die zijn geparseerd, worden in de uitvoer weergegeven. Tekenreeksen die niet overeenkomen met het patroon, worden uitgefilterd.
Voorbeelden
De parse-where
operator biedt een gestroomlijnde manier om een tabel te extend
openen met behulp van meerdere extract
toepassingen op dezelfde string
expressie. Dit is vooral handig als de tabel een string
kolom bevat die verschillende waarden bevat die u in afzonderlijke kolommen wilt opsplitsen. U kunt bijvoorbeeld een kolom opsplitsen die is geproduceerd door een ontwikkelaarstracering ("printf
"/"Console.WriteLine
") instructie.
parse
gebruiken
In het onderstaande voorbeeld bevat de kolom EventText
van de tabel Traces
tekenreeksen van de vorm Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
. Met de onderstaande bewerking wordt de tabel uitgebreid met zes kolommen: resourceName
, totalSlices
, sliceNumber
, lockTime
, releaseTime
, previousLockTime
, Month
en Day
.
Een aantal tekenreeksen heeft geen volledige overeenkomst.
Met behulp van parse
hebben de berekende kolommen null-waarden.
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
Uitvoer
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 |
parse-where
gebruiken
Als u 'parse-where' gebruikt, worden geparseerde tekenreeksen uit het resultaat gefilterd.
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
Uitvoer
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-modus met behulp van regex-vlaggen
Gebruik de volgende query om de resourceName en totalSlices op te halen:
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
Uitvoer
resourceName | totalSlices |
---|---|
parse-where
met niet-hoofdlettergevoelige regex-vlag
In de bovenstaande query was de standaardmodus hoofdlettergevoelig, dus de tekenreeksen zijn geparseerd. Er is geen resultaat verkregen.
Voer uit met een niet-hoofdlettergevoelige (i
) regex-vlag om het vereiste resultaat parse-where
te verkrijgen.
Slechts drie tekenreeksen worden geparseerd, dus het resultaat is drie records (sommige totalSlices bevatten ongeldige gehele getallen).
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
Uitvoer
resourceName | totalSlices |
---|---|
PipelineScheduler | 27 |
PipelineScheduler | 27 |
PipelineScheduler | 27 |