parse-where-operator
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 \n en 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 nastring
kolom. - Het parseringspatroon kan beginnen met ColumnName, naast StringConstant.
- Als de geparseerde expressie niet van het type
string
is, wordt deze geconverteerd naar het typestring
.
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
, Month
en Day
.
Een aantal tekenreeksen hebben geen volledige overeenkomst.
Met 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 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 |