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 \nen 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 na string kolom.
  • Het patroon parseren 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 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, Monthen Day.

Een aantal tekenreeksen heeft 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 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