operator parse-where

Evalueert een tekenreeksexpressie en parseert de waarde ervan in een of meer berekende kolommen. Het resultaat is alleen de tekenreeksen die met succes zijn geparseerd.

parse-where parseert de tekenreeksen op dezelfde manier als parseren en filtert tekenreeksen die niet zijn geparseerd.

Zie de parse-operator, die null-waarden produceert voor niet-geparseerde tekenreeksen.

Syntax

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

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
T string ✔️ De tabellaire invoer om te parseren.
Soort string ✔️ Een van de ondersteunde soortwaarden. De standaardwaarde is simple.
regexFlags string Als soort is regex, kunt u regex-vlaggen opgeven die moeten worden gebruikt, zoals U voor niet-groen, m voor de modus met meerdere regels, s voor overeenkomende nieuwe regel \nen i voor niet-hoofdlettergevoelig. Meer vlaggen vindt u in Vlaggen.
expression string ✔️ Een expressie die resulteert in een tekenreeks.
stringConstant string ✔️ Een tekenreeksconstante waarnaar moet worden gezocht en geparseerd.
columnName string ✔️ De naam van een kolom waaraan een waarde moet worden toegewezen, geëxtraheerd uit de tekenreeksexpressie.
columnType string 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 na string kolom.
  • Het parseringspatroon kan beginnen met ColumnName, naast StringConstant.
  • Als de geparseerde expressie niet van het type stringis, wordt deze geconverteerd naar het type string.

Ondersteunde soortwaarden

Tekst Description
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 worden reguliere expressies gebruikt om de overeenkomst 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 door de parse intern wordt gegenereerd, is .*?<regex1>(.*?)<regex2>(\-\d+).

  • * is vertaald naar .*?.
  • string is vertaald naar .*?.
  • long is vertaald naar \-\d+.

Retouren

De invoertabel, die wordt uitgebreid op basis van 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 bereiken met behulp van meerdere extract toepassingen op dezelfde string expressie. Dit is vooral handig wanneer 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, Monthen Day.

Enkele tekenreeksen hebben geen volledige overeenkomst.

Met behulp van parsehebben 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 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 hoofdlettergevoelige regex-vlag

In de bovenstaande query was de standaardmodus hoofdlettergevoelig, dus de tekenreeksen zijn geparseerd. Er is geen resultaat verkregen.

Als u het vereiste resultaat wilt ophalen, voert u uit parse-where met een regex-vlag die niet hoofdlettergevoelig (i) is.

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