parse-kv, opérateur
Extrait les informations structurées d’une expression de chaîne, et les représente sous forme de clé/valeur.
Les modes d’extraction suivants sont pris en charge :
- Délimètre spécifié : extraction basée sur des délimiteurs spécifiés qui dictent la façon dont les clés/valeurs et les paires sont séparées les unes des autres.
- Délimètre non spécifié : extraction sans qu’il soit nécessaire de spécifier des délimiteurs. Tout caractère nonphanumé est considéré comme un délimiteur.
- Regex : extraction basée sur des expressions régulières.
Syntax
Délimètre spécifié
T|
parse-kv
Expressionas
(
KeysList)
with
(
pair_delimiter
=
PairDelimiter,
kv_delimiter
=
KvDelimiter [,
quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] [,
greedy
=
true
] )
Délimiteur non spécifié
T|
parse-kv
Expressionas
(
KeysList)
with
(
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] )
Expression régulière
T|
parse-kv
Expressionas
(
KeysList)
with
(
regex
=
RegexPattern)
)
Découvrez les conventions de syntaxe.
Paramètres
Nom | Type | Obligatoire | Description |
---|---|---|---|
Expression | string |
✔️ | Expression à partir de laquelle extraire les valeurs de clé. |
KeysList | string |
✔️ | Liste séparée par des virgules des noms de clés et de leurs types de données de valeur. L’ordre des clés ne doit pas correspondre à l’ordre dans lequel elles apparaissent dans le texte. |
PairDelimiter | string |
Délimiteur qui sépare les paires clé-valeur les unes des autres. | |
KvDelimiter | string |
Délimiteur qui sépare les clés des valeurs. | |
QuoteChars | string |
Littéral de chaîne d’un ou deux caractères représentant des guillemets ouvrants et fermants avec lesquels le nom de clé ou la valeur extraite peut être encapsulé. Le paramètre peut être répété pour spécifier un ensemble distinct de guillemets ouvrants/fermants. | |
EscapeChar | string |
Littéral de chaîne d’un caractère décrivant un caractère qui peut être utilisé pour échapper des caractères spéciaux dans une valeur entre guillemets. Le paramètre peut être répété si plusieurs caractères d’échappement sont utilisés. | |
RegexPattern | string |
Expression régulière contenant exactement deux groupes de capture. Le premier groupe représente le nom de la clé et le deuxième groupe représente la valeur de la clé. |
Retours
Expression tabulaire d’entrée d’origine T, étendue avec des colonnes par clés spécifiées à extraire.
Notes
- Si une clé n’apparaît pas dans un enregistrement, la valeur de colonne correspondante est
null
ou une chaîne vide, selon le type de colonne. - Seules les clés répertoriées dans l’opérateur sont extraites.
- La première apparence d’une clé est extraite et les valeurs suivantes sont ignorées.
- Lors de l’extraction de clés et de valeurs, les espaces blancs de début et de fin sont ignorés.
Exemples
Extraction avec des délimiteurs bien définis
Dans l’exemple suivant, les clés et les valeurs sont séparées par des délimiteurs bien définis. Ces délimètres sont des virgules et des deux-points.
print str="ThreadId:458745723, Machine:Node001, Text: The service is up, Level: Info"
| parse-kv str as (Text: string, ThreadId:long, Machine: string) with (pair_delimiter=',', kv_delimiter=':')
| project-away str
Sortie
Texte | ThreadId | Machine |
---|---|---|
Le service est en cours | 458745723 | Node001 |
Extraction avec guillemets de valeur
Parfois, les noms de clé ou les valeurs sont encapsulés entre guillemets, ce qui permet aux valeurs elles-mêmes de contenir des caractères délimiteurs. Les exemples suivants montrent comment un quote
argument est utilisé pour extraire ces valeurs.
print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="connection aborted" "event time"=2021-01-01T10:00:54'
| parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"')
| project-away str
Sortie
heure de l’événement | src | dst | octets | échec |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | connexion abandonnée |
L’exemple suivant utilise différents guillemets ouvrants et fermants :
print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure=(connection aborted) (event time)=(2021-01-01 10:00:54)'
| parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='()')
| project-away str
Sortie
heure de l’événement | src | dst | octets | échec |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | connexion abandonnée |
Les valeurs elles-mêmes peuvent contenir des guillemets correctement placés dans une séquence d’échappement, comme le montre l’exemple suivant :
print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="the remote host sent \\"bye!\\"" time=2021-01-01T10:00:54'
| parse-kv str as (['time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"', escape='\\')
| project-away str
Sortie
time | src | dst | octets | échec |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | l’hôte distant a envoyé « bye ! » |
Extraction en mode gourmand
Il existe des cas où des valeurs sans guillemets peuvent contenir des délimiteurs de paires. Dans ce cas, utilisez le greedy
mode pour indiquer à l’opérateur à analyser jusqu’à la prochaine apparence de la clé (ou la fin de la chaîne) lors de la recherche de la fin de la valeur.
Les exemples suivants comparent le fonctionnement de l’opérateur avec et sans le greedy
mode spécifié :
print str='name=John Doe phone=555 5555 city=New York'
| parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=')
| project-away str
Sortie
name | phone | city |
---|---|---|
John | 555 | Nouveau |
print str='name=John Doe phone=555 5555 city=New York'
| parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=', greedy=true)
| project-away str
Sortie
name | phone | city |
---|---|---|
John Doe | 555 5555 | New York |
Extraction sans délimiteurs bien définis
Dans l’exemple suivant, tout caractère nonalphanumé est considéré comme un délimiteur valide :
print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: Started"
| parse-kv str as (Text: string, ThreadId:long, Machine: string)
| project-away str
Sortie
Texte | ThreadId | Machine |
---|---|---|
Démarré | 458745723 | Node001 |
Les valeurs de guillemets et d’échappement sont autorisées dans ce mode, comme illustré dans l’exemple suivant :
print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: 'The service \\' is up'"
| parse-kv str as (Text: string, ThreadId:long, Machine: string) with (quote="'", escape='\\')
| project-away str
Sortie
Texte | ThreadId | Machine |
---|---|---|
Le service ' est en cours | 458745723 | Node001 |
Extraction à l’aide de regex
Lorsqu’aucun délimiteur ne définit suffisamment bien la structure du texte, l’extraction basée sur l’expression régulière peut être utile.
print str=@'["referer url: https://hostname.com/redirect?dest=/?h=1234", "request url: https://hostname.com/?h=1234", "advertiser id: 24fefbca-cf27-4d62-a623-249c2ad30c73"]'
| parse-kv str as (['referer url']:string, ['request url']:string, ['advertiser id']: guid) with (regex=@'"([\w ]+)\s*:\s*([^"]*)"')
| project-away str
Sortie
URL de l’éditeur de référence | URL de requête | ID de l’annonceur |
---|---|---|
https://hostname.com/redirect?dest=/?h=1234 |
https://hostname.com/?h=1234 |
24fefbca-cf27-4d62-a623-249c2ad30c73 |
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