Delen via


parse-where-operator

Van toepassing op: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel-

Evalueert een tekenreeksexpressie en parseert de waarde ervan in een of meer berekende kolommen. Het resultaat is alleen de geparseerde tekenreeksen.

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

Zie parse-operator, waarmee null-waarden worden gegenereerd voor niet-geparseerde tekenreeksen.

Syntaxis

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

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
T- string ✔️ De tabellaire invoer die moet worden geparseerd.
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-gegreedy, m voor de modus met meerdere regels, s voor overeenkomende nieuwe regel \nen i voor hoofdlettergevoelig. Meer vlaggen vindt u in Vlaggen.
expressie string ✔️ Een expressie die resulteert in een tekenreeks.
stringConstant- string ✔️ Een tekenreeksconstante waarvoor 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 bepaalde kolommen ook wilt verwijderen of een andere naam wilt geven.
  • 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

Sms Beschrijving
simple Dit is de standaardwaarde. stringConstant een reguliere tekenreekswaarde is en de overeenkomst strikt is. 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 strikt is. 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 parseren het patroon naar een regex en gebruikt reguliere expressies 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 intern door de parsering wordt gegenereerd, wordt .*?<regex1>(.*?)<regex2>(\-\d+).

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

Retourneert

De invoertabel, die wordt uitgebreid op basis van de lijst met kolommen die aan de operator worden verstrekt.

Notitie

Alleen geparseerde tekenreeksen worden in de uitvoer weergegeven. Tekenreeksen die niet overeenkomen met het patroon, worden uitgefilterd.

Voorbeelden

In de voorbeelden in deze sectie ziet u hoe u de syntaxis kunt gebruiken om aan de slag te gaan.

In de voorbeelden in dit artikel worden openbaar beschikbare tabellen gebruikt in de Help-cluster, zoals de StormEvents tabel in de Voorbeelden database.

In de voorbeelden in dit artikel worden openbaar beschikbare tabellen gebruikt, zoals de tabel StormEvents in de weather analytics voorbeeldgegevens.

De operator parse-where biedt een gestroomlijnde manier om een tabel te extend met behulp van meerdere extract toepassingen op dezelfde string expressie. Dit is het handigst 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 tabel Traces tekenreeksen van het formulier 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 hebben geen volledige overeenkomst.

Met 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 niet-voltooide 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 is de standaardmodus hoofdlettergevoelig, dus de tekenreeksen zijn geparseerd. Er is geen resultaat verkregen.

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

Er worden slechts drie tekenreeksen 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