Opérateur parse-where
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Évalue une expression de chaîne et analyse sa valeur en une ou plusieurs colonnes calculées. Le résultat est uniquement les chaînes analysées avec succès.
parse-where
analyse les chaînes de la même façon que l’analyse et filtre les chaînes qui n’ont pas été analysées correctement.
Consultez l’opérateur d’analyse, qui produit des valeurs Null pour les chaînes analysées sans succès.
Syntaxe
Expression T | parse-where
[kind=
kind [flags=
regexFlags]] with
*
(stringConstant columnName [:
columnType]) ... *
En savoir plus sur les conventions de syntaxe.
Paramètres
Nom | Type | Requise | Description |
---|---|---|---|
T | string |
✔️ | Entrée tabulaire à analyser. |
kind | string |
✔️ | Une des valeurs de type prises en charge. La valeur par défaut est simple . |
regexFlags | string |
Si le type est regex , vous pouvez spécifier des indicateurs d’expression régulière à utiliser comme U pour le mode multiligne, m s pour correspondre à une nouvelle ligne \n et i pour une non-respect de la casse. Vous trouverez d’autres indicateurs dans Les indicateurs. |
|
expression | string |
✔️ | expression qui prend la valeur d’une chaîne. |
stringConstant | string |
✔️ | Constante de chaîne pour laquelle rechercher et analyser. |
columnName | string |
✔️ | nom d’une colonne à laquelle attribuer une valeur extraite de l’expression de chaîne. |
columnType | string |
Valeur scalaire indiquant le type vers lequel convertir la valeur. La valeur par défaut est string . |
Remarque
- Utilisez le projet si vous souhaitez également supprimer ou renommer certaines colonnes.
- Utilisez
*
le modèle pour ignorer les valeurs de courrier indésirable. Cette valeur ne peut pas être utilisée aprèsstring
la colonne. - Le modèle d’analyse peut commencer par ColumnName, en plus de StringConstant.
- Si l’expression analysée n’est pas de type
string
, elle est convertie en typestring
.
Valeurs de type prises en charge
Détails | Description |
---|---|
simple |
Il s’agit de la valeur par défaut. stringConstant est une valeur de chaîne régulière et la correspondance est stricte. Tous les délimiteurs de chaîne doivent apparaître dans la chaîne analysée, et toutes les colonnes étendues doivent correspondre aux types requis. |
regex |
stringConstant peut être une expression régulière et la correspondance est stricte. Tous les délimiteurs de chaîne, qui peuvent être une expression régulière pour ce mode, doivent apparaître dans la chaîne analysée, et toutes les colonnes étendues doivent correspondre aux types requis. |
Mode Regex
En mode regex, l’analyse traduit le modèle en expression régulière et utilise des expressions régulières pour effectuer la correspondance à l’aide de groupes capturés numérotés gérés en interne. Par exemple :
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
L’expression régulière qui sera générée par l’analyse en interne est .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
a été traduit en.*?
.string
a été traduit en.*?
.long
a été traduit en\-\d+
.
Retours
Table d’entrée, étendue en fonction de la liste des colonnes fournies à l’opérateur.
Remarque
Seules les chaînes analysées sont dans la sortie. Les chaînes qui ne correspondent pas au modèle seront filtrées.
Exemples
L’opérateur parse-where
offre un moyen simplifié d’étendre (extend
) une table à l’aide de plusieurs applications extract
sur la même expression string
. Cela est le plus utile lorsque la table a une string
colonne qui contient plusieurs valeurs que vous souhaitez décomposer en colonnes individuelles. Par exemple, vous pouvez décomposer une colonne produite par une instruction de trace de développeur (« printf
"/"Console.WriteLine
»).
Utilisation de parse
Dans l’exemple ci-dessous, la colonne EventText
de table Traces
contient des chaînes du formulaire Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
. L’opération ci-dessous étend la table avec six colonnes : , , lockTime
, , , , previousLockTime
Month
et Day
. releaseTime
sliceNumber
totalSlices
resourceName
Quelques-unes des chaînes n’ont pas de correspondance complète.
À l’aide parse
de , les colonnes calculées ont des valeurs Null.
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
Sortie
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 |
Utilisation de parse-where
L’utilisation de « parse-where » permet de filtrer les chaînes analysées sans succès à partir du résultat.
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
Sortie
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 |
Mode Regex à l’aide d’indicateurs regex
Pour obtenir resourceName et totalSlices, utilisez la requête suivante :
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
Sortie
resourceName | totalSlices |
---|---|
parse-where
avec l’indicateur regex non sensible à la casse
Dans la requête ci-dessus, le mode par défaut respecte la casse, de sorte que les chaînes ont été analysées avec succès. Aucun résultat n’a été obtenu.
Pour obtenir le résultat requis, exécutez parse-where
avec un indicateur regex non respectant la casse (i
).
Seules trois chaînes seront analysées avec succès. Le résultat est donc trois enregistrements (certains totalSlices contiennent des entiers non valides).
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
Sortie
resourceName | totalSlices |
---|---|
PipelineScheduler | 27 |
PipelineScheduler | 27 |
PipelineScheduler | 27 |