Opérateur parse-where
Évalue une expression de chaîne et analyse sa valeur dans 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 manière 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.
Syntax
T| parse-where
[kind=
kind [flags=
regexFlags]] expressionwith
*
(stringConstantcolumnName [:
columnType]) *
...
Découvrez les conventions de syntaxe.
Paramètres
Nom | Type | Obligatoire | 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 a la valeur regex , vous pouvez spécifier des indicateurs regex à utiliser comme U pour le non-classement, m pour le mode multiligne, s pour la correspondance de la nouvelle ligne \n et i pour les indicateurs de respect de la casse. Vous trouverez d’autres indicateurs dans 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, extrait 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 . |
Notes
- Utilisez project si vous souhaitez également supprimer ou renommer certaines colonnes.
- Utilisez
*
dans le modèle pour ignorer les valeurs indésirables. 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 sera convertie en typestring
.
Valeurs de type prises en charge
Texte | 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 regex et utilise des expressions régulières afin d’effectuer la correspondance à l’aide de groupes capturés numérotés qui sont gérés en interne. Par exemple :
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
Le regex qui sera généré en interne par l’analyse est .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
a été traduit en.*?
.string
a été traduit en.*?
.long
a été traduit en\-\d+
.
Retours
La table d’entrée, qui est étendue en fonction de la liste des colonnes fournies à l’opérateur.
Notes
Seules les chaînes analysées avec succès se trouveront 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 particulièrement utile lorsque la table a une string
colonne qui contient plusieurs valeurs que vous souhaitez diviser en colonnes individuelles. Par exemple, vous pouvez diviser une colonne qui a été produite par une instruction de trace de développeur ( »printf
« /"Console.WriteLine
»).
Utilisation de parse
Dans l’exemple ci-dessous, la colonne EventText
de la table Traces
contient des chaînes de la forme 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 : resourceName
, totalSlices
, sliceNumber
, lockTime
, releaseTime
previousLockTime
, , Month
, et Day
.
Certaines chaînes n’ont pas de correspondance complète.
À l’aide parse
de , les colonnes calculées auront 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 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 les 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 insensible à la casse
Dans la requête ci-dessus, le mode par défaut respectant la casse, les chaînes ont donc été analysées correctement. Aucun résultat n’a été obtenu.
Pour obtenir le résultat requis, exécutez parse-where
avec un indicateur regex qui ne respecte pas la casse (i
).
Seules trois chaînes seront analysées correctement, de sorte que le résultat est de 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 |
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour