Todos los productos
Search
Centro de documentos

Simple Log Service:Instrucciones para extraer datos semiestructurados

Última actualización: Sep 03, 2026

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.

Importante
  • 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 VARCHAR y su valor no puede ser null. De lo contrario, no se realiza la operación de extracción.

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.

Importante
  • 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 output.

  • False: Coincidencia no estricta. Se utiliza la política de coincidencia máxima.

    • Si el número de valores es mayor que el número de campos, los valores adicionales no se generan en la salida.

    • Si el número de campos es mayor que el número de valores, se generan cadenas vacías para los campos adicionales.

  • True: Coincidencia estricta. No se genera ningún campo en la salida.

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 VARCHAR y su valor no puede ser null. De lo contrario, no se realiza la operación de extracción.

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.

Importante
  • 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.

  • El tipo es JSON.

  • El tipo es VARCHAR y el valor es una cadena JSON válida.

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.

Importante
  • 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.

  • Deshabilitado: Detiene la coincidencia del valor de campo cuando se encuentra un delim.

  • Habilitado: Hace coincidir todo el contenido anterior al siguiente par clave-valor como el valor del campo.

field

Campo

Sí

El nombre del campo de origen que se va a analizar.

  1. Si este campo no existe en la entrada de datos o su valor es null, la entrada no se procesa.

  2. Si no se hace coincidir ningún par clave-valor en el contenido de los datos, la entrada no se procesa.

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.

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 delim.

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 VARCHAR y su valor no puede ser null. De lo contrario, no se realiza la operación de extracción.

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'