Este tema describe cómo utilizar instrucciones para extraer datos semiestructurados y proporciona ejemplos relevantes.
parse-regexp
Extrae información de un campo especificado que coincide con los grupos de expresiones regulares.
El tipo de dato de la información extraída es VARCHAR. Si un campo extraído tiene el mismo nombre que un campo en los datos de entrada, consulte Value retention and overwriting para conocer la política de retención de valores.
No se pueden realizar operaciones en los campos de tiempo __time__ y __time_ns_part__. Para obtener más información, consulte Time fields.
Sintaxis
| parse-regexp <field>, <pattern> as <output>, ...
Parámetros
|
Parámetro |
Tipo |
Obligatorio |
Descripción |
|
field |
Campo |
Sí |
El nombre del campo de origen que se va a extraer. Los datos de entrada deben contener este campo. El campo debe ser de tipo |
|
pattern |
Regexp |
Sí |
La expresión regular. Se admite la sintaxis RE2. |
|
output |
Campo |
No |
El nombre del campo utilizado para almacenar el resultado de la extracción. |
Ejemplos
-
Ejemplo 1: Realizar coincidencias exploratorias de forma secuencial.
-
Instrucción 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. -
Datos de entrada
content: '10.0.0.0 GET /index.html 15824 0.043' -
Salida
content: '10.0.0.0 GET /index.html 15824 0.043' ip: '10.0.0.0' method: 'GET'
-
-
Ejemplo 2: Realizar una coincidencia completa de patrón mediante captura de expresiones regulares sin nombre.
-
Instrucción SPL
* | parse-regexp content, '(\S+)\s+(\w+)' as ip, method -
Datos de entrada
content: '10.0.0.0 GET /index.html 15824 0.043' -
Salida
content: '10.0.0.0 GET /index.html 15824 0.043' ip: '10.0.0.0' method: 'GET'
-
parse-csv
Extrae datos en formato CSV de un campo especificado.
El tipo de dato de la información extraída es VARCHAR. Si un campo extraído tiene el mismo nombre que un campo en los datos de entrada, consulte Value retention and overwriting para conocer la política de retención de valores.
No se pueden realizar operaciones en los campos de tiempo __time__ y __time_ns_part__. Para obtener más información, consulte Time fields.
Sintaxis
| parse-csv -delim=<delim> -quote=<quote> -strict <field> as <output>, ...
Parámetros
Parámetro | Tipo | Obligatorio | Descripción |
delim | String | No | El carácter separador para el contenido de los datos. Puede ser de uno a tres caracteres ASCII válidos. Puede usar caracteres de escape para representar caracteres especiales. Por ejemplo, \t representa un carácter de tabulación, \11 representa el carácter ASCII con el número ordinal octal 11 y \x09 representa el carácter ASCII con el número ordinal hexadecimal 09. También puede usar un separador de varios caracteres, como El valor predeterminado es una coma (,). |
quote | Char | No | El carácter de cita para el contenido de los datos. Es un único carácter ASCII válido que se usa cuando el contenido de los datos contiene el separador. Algunos ejemplos incluyen comillas dobles ("), comillas simples (') y un carácter invisible (0x01). De forma predeterminada, no se utiliza ningún carácter de cita. Importante Este parámetro solo surte efecto cuando el parámetro delim es un solo carácter. El valor de este parámetro no puede ser igual al valor del parámetro delim. |
strict | Bool | No | Especifica si se debe habilitar la coincidencia estricta cuando el número de valores en el contenido de los datos no coincide con el número de campos especificados en
Esta función está deshabilitada de forma predeterminada. Para habilitarla, agregue este parámetro. |
field | Campo | Sí | El nombre del campo de origen que se va a analizar. El contenido de los datos debe incluir este campo. El campo debe ser de tipo |
output | Campo | Sí | El nombre del campo utilizado para almacenar el contenido de los datos analizados. |
Ejemplos
-
Ejemplo 1: Coincidencia simple de datos.
-
Instrucción SPL
* | parse-csv content as x, y, z -
Datos de entrada
content: 'a,b,c' -
Salida
content: 'a,b,c' x: 'a' y: 'b' z: 'c'
-
-
Ejemplo 2: Usar las comillas dobles predeterminadas (") como carácter de cita para hacer coincidir contenido que contiene caracteres especiales.
-
Instrucción SPL
* | parse-csv content as ip, time, host -
Datos de entrada
content: '192.168.0.100,"10/Jun/2019:11:32:16,127 +0800",example.aliyundoc.com' -
Salida
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'
-
-
Ejemplo 3: Usar un separador de varios caracteres.
-
Instrucción SPL
* | parse-csv -delim='||' content as time, ip, req -
Datos de entrada
content: '05/May/2022:13:30:28||127.0.0.1||POST /put?a=1&b=2' -
Salida
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
Extrae los pares clave-valor de primer nivel de un campo especificado en formato JSON.
El tipo de dato de la información extraída es VARCHAR. Si un campo extraído tiene el mismo nombre que un campo en los datos de entrada, consulte Value retention and overwriting para conocer la política de retención de valores.
No se pueden realizar operaciones en los campos de tiempo __time__ y __time_ns_part__. Para obtener más información, consulte Time fields.
Sintaxis
| parse-json -mode=<mode> -path=<path> -prefix=<prefix> <field>
Parámetros
Parámetro | Tipo | Obligatorio | Descripción |
mode | String | No | Especifica el modo de valor para el resultado si un nuevo campo tiene el mismo nombre que un campo en los datos de entrada. El valor predeterminado es overwrite. |
path | JSONPath | No | Especifica la ruta JSON en el contenido del campo para localizar el contenido que se va a extraer. El valor predeterminado es una cadena vacía, lo que indica que se extrae directamente el contenido completo del campo especificado. |
prefix | String | No | El prefijo para los campos de resultado después de expandir la estructura JSON. El valor predeterminado es una cadena vacía. |
field | Campo | Sí | El nombre del campo de origen que se va a analizar. Los datos de entrada deben contener este campo, su valor no puede ser null y se debe cumplir una de las siguientes condiciones. De lo contrario, no se realiza la operación de extracción.
|
Ejemplos
-
Ejemplo 1: Extraer todos los pares clave-valor del campo y.
-
Instrucción SPL
* | parse-json y -
Datos de entrada
x: '0' y: '{"a": 1, "b": 2}' -
Salida
x: '0' y: '{"a": 1, "b": 2}' a: '1' b: '2'
-
-
Ejemplo 2: Extraer el valor de la clave body del campo content y, a continuación, extraer todos sus pares clave-valor.
-
Instrucción SPL
* | parse-json -path='$.body' content -
Datos de entrada
content: '{"body": {"a": 1, "b": 2}}' -
Salida
content: '{"body": {"a": 1, "b": 2}}' a: '1' b: '2'
-
-
Ejemplo 3: Establecer el modo de salida de valores de campo en preserve para conservar los valores originales de los campos existentes.
-
Instrucción SPL
* | parse-json -mode='preserve' y -
Datos de entrada
a: 'xyz' x: '0' y: '{"a": 1, "b": 2}' -
Salida
x: '0' y: '{"a": 1, "b": 2}' a: 'xyz' b: '2'
-
parse-kv
Extrae pares clave-valor de un campo especificado.
El tipo de dato de la información extraída es VARCHAR. Si un campo extraído tiene el mismo nombre que un campo en los datos de entrada, consulte Value retention and overwriting para conocer la política de retención de valores.
No se pueden realizar operaciones en los campos de tiempo __time__ y __time_ns_part__. Para obtener más información, consulte Time fields.
Sintaxis
Extracción por separador
Extrae pares clave-valor según separadores especificados.
| parse-kv -mode=<mode> -prefix=<prefix> -greedy <field>, <delim>, <kv-sep>
Extracción por expresión regular
Extrae pares clave-valor según una expresión regular especificada.
| parse-kv -regexp -mode=<mode> -prefix=<prefix> <field>, <pattern>
Parámetros
Extracción por separador
Parámetro | Tipo | Obligatorio | Descripción |
mode | String | No | Si el campo de destino correspondiente ya existe en los datos de entrada, puede seleccionar un modo de sobrescritura de datos. El valor predeterminado es overwrite. Para obtener más información, consulte Field extraction check and overwrite modes. |
prefix | String | No | El prefijo para los nombres de los campos de salida que contienen los resultados de la extracción. El valor predeterminado es una cadena vacía. |
greedy | Bool | No | Habilita la coincidencia codiciosa para los valores de campo.
|
field | Campo | Sí | El nombre del campo de origen que se va a analizar.
|
delim | Char | Sí | El carácter separador entre diferentes pares clave-valor. Puede ser de uno a cinco caracteres ASCII válidos, como No puede especificar una subcadena de |
kv-sep | Char | Sí | El carácter que conecta la clave y el valor dentro de un par clave-valor. Puede ser de uno a cinco caracteres ASCII válidos, como No puede especificar una subcadena de |
Extracción por expresión regular
|
Parámetro |
Tipo |
Obligatorio |
Descripción |
|
regexp |
Bool |
Sí |
Habilita el modo de extracción por expresión regular. |
|
mode |
String |
No |
Si el campo de destino correspondiente ya existe en los datos de entrada, puede seleccionar un modo de sobrescritura de datos. El valor predeterminado es overwrite. Para obtener más información, consulte Field extraction check and overwrite modes. |
|
prefix |
String |
No |
El prefijo para los nombres de los campos de salida que contienen los resultados de la extracción. El valor predeterminado es una cadena vacía. |
|
field |
Campo |
Sí |
El nombre del campo de origen que se va a extraer. Los datos de entrada deben contener este campo. El campo debe ser de tipo |
|
pattern |
RegExpr |
Sí |
Una expresión regular que contiene dos grupos de captura. El primer grupo de captura extrae el nombre del campo y el segundo grupo de captura extrae el valor del campo. Se admite la sintaxis RE2. |
Ejemplos
-
Ejemplo 1: Usar separadores de varios caracteres para extraer etiquetas de datos de métricas de SLS como campos de datos
-
Instrucción SPL
* | parse-kv -prefix='__labels__.' __labels__, '|', '#$#' -
Datos de entrada
__name__: 'net_in' __value__: '231461.57374215033' __time_nano__: '1717378679274117026' __labels__: 'cluster#$#sls-etl|hostname#$#iZbp17raa25u0xi4wifopeZ|interface#$#veth02cc91d2|ip#$#192.168.22.238' -
Datos de salida
__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'
-
-
Ejemplo 2: Habilitar el modo de coincidencia codiciosa para extraer pares clave-valor de registros de acceso.
-
Instrucción SPL
* | parse-kv -greedy content, ' ', '=' -
Datos de entrada
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' -
Datos de salida
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'
-
-
Ejemplo 3: Usar el modo de extracción por expresión regular para manejar delimitadores de pares clave-valor y separadores de clave-valor complejos.
-
Instrucción SPL
* | parse-kv -regexp content, '([^&?]+)(?:=|:)([^&?]+)' -
Datos de entrada
content: 'k1=v1&k2=v2?k3:v3' k1: 'xyz' -
Datos de salida
content: 'k1=v1&k2=v2?k3:v3' k1: 'v1' k2: 'v2' k3: 'v3'
-
-
Ejemplo 4: Establecer el modo de salida de valores de campo en preserve para conservar los valores originales de los campos existentes.
-
Instrucción SPL
* | parse-kv -regexp -mode='preserve' content, '([^&?]+)(?:=|:)([^&?]+)' -
Datos de entrada
content: 'k1=v1&k2=v2?k3:v3' k1: 'xyz' -
Salida
content: 'k1=v1&k2=v2?k3:v3' k1: 'xyz' k2: 'v2' k3: 'v3'
-