Opérateur parse-where

S’applique à : ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft 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-whereanalyse 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 \net 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ès string la colonne.
  • Le modèle d’analyse peut commencer par ColumnName, en plus de StringConstant.
  • Si l’expression analysée n’est pas de typestring, elle est convertie en type string.

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, , , , previousLockTimeMonthet Day. releaseTimesliceNumbertotalSlicesresourceName

Quelques-unes des chaînes n’ont pas de correspondance complète.

À l’aide parsede , 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