Cette rubrique explique comment utiliser des instructions pour extraire des données semi-structurées et fournit des exemples pertinents.
parse-regexp
Extrait les informations d'un champ spécifié qui correspondent aux groupes d'expressions régulières.
Le type de données des informations extraites est VARCHAR. Si un champ extrait porte le même nom qu'un champ présent dans les données d'entrée, consultez la section Value retention and overwriting pour connaître la politique de conservation des valeurs.
Les opérations sur les champs temporels __time__ et __time_ns_part__ sont interdites. Pour plus d'informations, consultez la section Time fields.
Syntax
| parse-regexp <field>, <pattern> as <output>, ...
Parameters
|
Parameter |
Type |
Required |
Description |
|
field |
Field |
Yes |
Nom du champ source à extraire. Les données d'entrée doivent contenir ce champ. Le champ doit être de type |
|
pattern |
Regexp |
Yes |
Expression régulière. La syntaxe RE2 est prise en charge. |
|
output |
Field |
No |
Nom du champ utilisé pour stocker le résultat de l'extraction. |
Examples
-
Exemple 1 : effectuez une correspondance exploratoire séquentielle.
-
Instruction SPL
* | parse-regexp content, '(\S+)' as ip -- Generates the ip field: 10.0.0.0. | parse-regexp content, '\S+\s+(\w+)' as method -- Generates the method field: GET. -
Données d'entrée
content: '10.0.0.0 GET /index.html 15824 0.043' -
Sortie
content: '10.0.0.0 GET /index.html 15824 0.043' ip: '10.0.0.0' method: 'GET'
-
-
Exemple 2 : effectuez une correspondance complète du modèle en utilisant la capture d'expressions régulières non nommées.
-
Instruction SPL
* | parse-regexp content, '(\S+)\s+(\w+)' as ip, method -
Données d'entrée
content: '10.0.0.0 GET /index.html 15824 0.043' -
Sortie
content: '10.0.0.0 GET /index.html 15824 0.043' ip: '10.0.0.0' method: 'GET'
-
parse-csv
Extrait les données au format CSV d'un champ spécifié.
Le type de données des informations extraites est VARCHAR. Si un champ extrait porte le même nom qu'un champ présent dans les données d'entrée, consultez la section Value retention and overwriting pour connaître la politique de conservation des valeurs.
Les opérations sur les champs temporels __time__ et __time_ns_part__ sont interdites. Pour plus d'informations, consultez la section Time fields.
Syntax
| parse-csv -delim=<delim> -quote=<quote> -strict <field> as <output>, ...
Parameters
Parameter | Type | Required | Description |
delim | String | No | Caractère de séparation du contenu des données. Il peut s'agir d'un à trois caractères ASCII valides. Vous pouvez utiliser des caractères d'échappement pour représenter des caractères spéciaux. Par exemple, \t représente un caractère de tabulation, \11 représente le caractère ASCII dont le numéro ordinal octal est 11, et \x09 représente le caractère ASCII dont le numéro ordinal hexadécimal est 09. Vous pouvez également utiliser un séparateur multicaractère, tel que La valeur par défaut est une virgule (,). |
quote | Char | No | Caractère de guillemet pour le contenu des données. Il s'agit d'un seul caractère ASCII valide utilisé lorsque le contenu des données contient le séparateur. Les exemples incluent un guillemet double ("), un guillemet simple (') et un caractère invisible (0x01). Par défaut, aucun caractère de guillemet n'est utilisé. Important Ce paramètre prend effet uniquement lorsque le paramètre delim est un seul caractère. La valeur de ce paramètre ne peut pas être identique à celle du paramètre delim. |
strict | Bool | No | Indique s'il faut activer la correspondance stricte lorsque le nombre de valeurs dans le contenu des données ne correspond pas au nombre de champs spécifiés dans
Cette fonctionnalité est désactivée par défaut. Pour l'activer, ajoutez ce paramètre. |
field | Field | Yes | Nom du champ source à analyser. Le contenu des données doit inclure ce champ. Le champ doit être de type |
output | Field | Yes | Nom du champ utilisé pour stocker le contenu des données analysées. |
Examples
-
Exemple 1 : correspondance de données simple.
-
Instruction SPL
* | parse-csv content as x, y, z -
Données d'entrée
content: 'a,b,c' -
Sortie
content: 'a,b,c' x: 'a' y: 'b' z: 'c'
-
-
Exemple 2 : utilisez le guillemet double par défaut (") comme caractère de guillemet pour faire correspondre le contenu contenant des caractères spéciaux.
-
Instruction SPL
* | parse-csv content as ip, time, host -
Données d'entrée
content: '192.168.0.100,"10/Jun/2019:11:32:16,127 +0800",example.aliyundoc.com' -
Sortie
content: '192.168.0.100,"10/Jun/2019:11:32:16,127 +0800",example.aliyundoc.com' ip: '192.168.0.100' time: '10/Jun/2019:11:32:16,127 +0800' host: 'example.aliyundoc.com'
-
-
Exemple 3 : utilisez un séparateur multicaractère.
-
Instruction SPL
* | parse-csv -delim='||' content as time, ip, req -
Données d'entrée
content: '05/May/2022:13:30:28||127.0.0.1||POST /put?a=1&b=2' -
Sortie
content: '05/May/2022:13:30:28||127.0.0.1||POST /put?a=1&b=2' time: '05/May/2022:13:30:28' ip: '127.0.0.1' req: 'POST /put?a=1&b=2'
-
parse-json
Extrait les paires clé-valeur de premier niveau d'un champ spécifié au format JSON.
Le type de données des informations extraites est VARCHAR. Si un champ extrait porte le même nom qu'un champ présent dans les données d'entrée, consultez la section Value retention and overwriting pour connaître la politique de conservation des valeurs.
Les opérations sur les champs temporels __time__ et __time_ns_part__ sont interdites. Pour plus d'informations, consultez la section Time fields.
Syntax
| parse-json -mode=<mode> -path=<path> -prefix=<prefix> <field>
Parameters
Parameter | Type | Required | Description |
mode | String | No | Spécifie le mode de valeur pour le résultat si un nouveau champ porte le même nom qu'un champ présent dans les données d'entrée. La valeur par défaut est overwrite. |
path | JSONPath | No | Spécifie le chemin JSON dans le contenu du champ pour localiser le contenu à extraire. La valeur par défaut est une chaîne vide, ce qui indique que le contenu complet du champ spécifié est extrait directement. |
prefix | String | No | Préfixe pour les champs de résultat après l'expansion de la structure JSON. La valeur par défaut est une chaîne vide. |
field | Field | Yes | Nom du champ source à analyser. Les données d'entrée doivent contenir ce champ, sa valeur ne peut pas être null et l'une des conditions suivantes doit être remplie. Sinon, l'extraction n'a pas lieu.
|
Examples
-
Exemple 1 : extrayez toutes les paires clé-valeur du champ y.
-
Instruction SPL
* | parse-json y -
Données d'entrée
x: '0' y: '{"a": 1, "b": 2}' -
Sortie
x: '0' y: '{"a": 1, "b": 2}' a: '1' b: '2'
-
-
Exemple 2 : extrayez la valeur de la clé body du champ content, puis extrayez toutes ses paires clé-valeur.
-
Instruction SPL
* | parse-json -path='$.body' content -
Données d'entrée
content: '{"body": {"a": 1, "b": 2}}' -
Sortie
content: '{"body": {"a": 1, "b": 2}}' a: '1' b: '2'
-
-
Exemple 3 : définissez le mode de sortie de la valeur du champ sur preserve pour conserver les valeurs d'origine des champs existants.
-
Instruction SPL
* | parse-json -mode='preserve' y -
Données d'entrée
a: 'xyz' x: '0' y: '{"a": 1, "b": 2}' -
Sortie
x: '0' y: '{"a": 1, "b": 2}' a: 'xyz' b: '2'
-
parse-kv
Extrait les paires clé-valeur d'un champ spécifié.
Le type de données des informations extraites est VARCHAR. Si un champ extrait porte le même nom qu'un champ présent dans les données d'entrée, consultez la section Value retention and overwriting pour connaître la politique de conservation des valeurs.
Les opérations sur les champs temporels __time__ et __time_ns_part__ sont interdites. Pour plus d'informations, consultez la section Time fields.
Syntax
Extraction by separator
Extrait les paires clé-valeur en fonction de séparateurs spécifiés.
| parse-kv -mode=<mode> -prefix=<prefix> -greedy <field>, <delim>, <kv-sep>
Extraction by regular expression
Extrait les paires clé-valeur en fonction d'une expression régulière spécifiée.
| parse-kv -regexp -mode=<mode> -prefix=<prefix> <field>, <pattern>
Parameters
Extraction by separator
Parameter | Type | Required | Description |
mode | String | No | Si le champ de destination correspondant existe déjà dans les données d'entrée, vous pouvez sélectionner un mode d'écrasement des données. La valeur par défaut est overwrite. Pour plus d'informations, consultez la section Field extraction check and overwrite modes. |
prefix | String | No | Préfixe pour les noms des champs de sortie contenant les résultats de l'extraction. La valeur par défaut est une chaîne vide. |
greedy | Bool | No | Active la correspondance gourmande pour les valeurs de champ.
|
field | Field | Yes | Nom du champ source à analyser.
|
delim | Char | Yes | Caractère de séparation entre les différentes paires clé-valeur. Il peut s'agir d'un à cinq caractères ASCII valides, tels que Vous ne pouvez pas spécifier une sous-chaîne de |
kv-sep | Char | Yes | Caractère qui relie la clé et la valeur au sein d'une paire clé-valeur. Il peut s'agir d'un à cinq caractères ASCII valides, tels que Vous ne pouvez pas spécifier une sous-chaîne de |
Extraction by regular expression
|
Parameter |
Type |
Required |
Description |
|
regexp |
Bool |
Yes |
Active le mode d'extraction par expression régulière. |
|
mode |
String |
No |
Si le champ de destination correspondant existe déjà dans les données d'entrée, vous pouvez sélectionner un mode d'écrasement des données. La valeur par défaut est overwrite. Pour plus d'informations, consultez la section Field extraction check and overwrite modes. |
|
prefix |
String |
No |
Préfixe pour les noms des champs de sortie contenant les résultats de l'extraction. La valeur par défaut est une chaîne vide. |
|
field |
Field |
Yes |
Nom du champ source à extraire. Les données d'entrée doivent contenir ce champ. Le champ doit être de type |
|
pattern |
RegExpr |
Yes |
Expression régulière contenant deux groupes de capture. Le premier groupe de capture extrait le nom du champ et le second extrait la valeur du champ. La syntaxe RE2 est prise en charge. |
Examples
-
Exemple 1 : utilisez des séparateurs multicaractères pour extraire les étiquettes des données de métriques SLS en tant que champs de données.
-
Instruction SPL
* | parse-kv -prefix='__labels__.' __labels__, '|', '#$#' -
Données d'entrée
__name__: 'net_in' __value__: '231461.57374215033' __time_nano__: '1717378679274117026' __labels__: 'cluster#$#sls-etl|hostname#$#iZbp17raa25u0xi4wifopeZ|interface#$#veth02cc91d2|ip#$#192.168.22.238' -
Données de sortie
__name__: 'net_in' __value__: '231461.57374215033' __time_nano__: '1717378679274117026' __labels__: 'cluster#$#sls-etl|hostname#$#iZbp17raa25u0xi4wifopeZ|interface#$#veth02cc91d2|ip#$#192.168.22.238' __labels__.cluster: 'sls-etl' __labels__.hostname: 'iZbp17raa25u0xi4wifopeZ' __labels__.interface: 'veth02cc91d2' __labels__.ip: '192.168.22.238'
-
-
Exemple 2 : activez le mode de correspondance gourmande pour extraire les paires clé-valeur des journaux d'accès.
-
Instruction SPL
* | parse-kv -greedy content, ' ', '=' -
Données d'entrée
content: 'src=127.0.0.1 dst=192.168.0.0 bytes=125 msg=connection refused body=this is test time=2024-05-21T00:00:00' -
Données de sortie
content: 'src=127.0.0.1 dst=192.168.0.0 bytes=125 msg=connection refused body=this is test time=2024-05-21T00:00:00' src: '127.0.0.1' dst: '192.168.0.0' bytes: '125' msg: 'connection refused' body: 'this is test' time: '2024-05-21T00:00:00'
-
-
Exemple 3 : utilisez le mode d'extraction par expression régulière pour gérer les délimiteurs complexes de paires clé-valeur et les séparateurs clé-valeur.
-
Instruction SPL
* | parse-kv -regexp content, '([^&?]+)(?:=|:)([^&?]+)' -
Données d'entrée
content: 'k1=v1&k2=v2?k3:v3' k1: 'xyz' -
Données de sortie
content: 'k1=v1&k2=v2?k3:v3' k1: 'v1' k2: 'v2' k3: 'v3'
-
-
Exemple 4 : définissez le mode de sortie de la valeur du champ sur preserve pour conserver les valeurs d'origine des champs existants.
-
Instruction SPL
* | parse-kv -regexp -mode='preserve' content, '([^&?]+)(?:=|:)([^&?]+)' -
Données d'entrée
content: 'k1=v1&k2=v2?k3:v3' k1: 'xyz' -
Sortie
content: 'k1=v1&k2=v2?k3:v3' k1: 'xyz' k2: 'v2' k3: 'v3'
-