Partager via


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 déterminent 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 avoir besoin de spécifier des délimiteurs. Tout caractère nonphanumérique est considéré comme un délimiteur.
  • Regex : extraction basée sur des expressions régulières.

Syntaxe

Délimètre spécifié

T parse-kv | Expression as ( KeysList = ) with pair_delimiter ( PairDelimiter , = kv_delimiter KvDelimiter [ quote =, QuoteChars ... [, escape = EscapeChar ...]] [, greedy = true])

Délimiteur non spécifié

T parse-kv | Expression as ( KeysList ) ( with [quote = QuoteChars ... [, escape = EscapeChar ...]])

Expression régulière

T | parse-kv Expression ( as KeysList = ( with regex ) RegexPattern) )

En savoir plus sur les conventions de syntaxe.

Paramètres

Nom Type Requise Description
Expression string ✔️ Expression à partir de laquelle extraire des valeurs de clé.
KeysList string ✔️ Liste séparée par des virgules de noms de clés et de leurs types de données valeur. L’ordre des clés n’a pas besoin de 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 Un littéral de chaîne à 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 clé.

Retours

Expression tabulaire d’entrée d’origine T, étendue avec des colonnes par clés spécifiées à extraire.

Remarque

  • Si une clé n’apparaît pas dans un enregistrement, la valeur de colonne correspondante est null soit 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 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 caractères 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

Détails 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 failure
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 connexion abandonnée

L’exemple suivant utilise des guillemets d’ouverture et de fermeture différents :

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 failure
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 caractères de guillemets correctement placés en échappement, comme l’illustre 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 failure
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 nonquoées peuvent contenir des délimiteurs de paires. Dans ce cas, utilisez le greedy mode pour indiquer à l’opérateur d’analyser jusqu’à l’apparence de la clé suivante (ou fin de chaîne) lors de la recherche de la fin de la valeur.

Les exemples suivants comparent le fonctionnement de l’opérateur 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 Nouvelle
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 nonphanumé 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

Détails ThreadId Machine
Démarré 458745723 Node001

Les valeurs entre guillemets et é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

Détails ThreadId Machine
Le service ' est en cours 458745723 Node001

Extraction à l’aide de regex

Lorsqu’aucun délimiteur ne définit correctement la structure de texte, l’extraction basée sur des expressions régulières 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