Este tópico descreve como usar instruções para extrair dados semiestruturados e apresenta exemplos relevantes.
parse-regexp
Extrai informações de um campo especificado que correspondem a grupos de expressões regulares.
O tipo de dado extraído é VARCHAR. Se um campo extraído tiver o mesmo nome de um campo nos dados de entrada, consulte Retenção e sobrescrita de valores para conhecer a política de retenção de valores.
Não é possível operar nos campos de tempo __time__ e __time_ns_part__. Para mais informações, consulte Campos de tempo.
Sintaxe
| parse-regexp <field>, <pattern> as <output>, ...
Parâmetros
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
field |
Campo |
Sim |
Nome do campo source a extrair. Os dados de entrada devem conter este campo. O campo deve ser do tipo |
|
pattern |
Regexp |
Sim |
A expressão regular. Há suporte à sintaxe RE2. |
|
output |
Campo |
Não |
Nome do campo usado para armazenar o resultado da extração. |
Exemplos
-
Exemplo 1: Correspondência exploratória sequencial.
-
Instrução 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. -
Dados de entrada
content: '10.0.0.0 GET /index.html 15824 0.043' -
Saída
content: '10.0.0.0 GET /index.html 15824 0.043' ip: '10.0.0.0' method: 'GET'
-
-
Exemplo 2: Correspondência completa de padrão com captura de expressão regular sem nome.
-
Instrução SPL
* | parse-regexp content, '(\S+)\s+(\w+)' as ip, method -
Dados de entrada
content: '10.0.0.0 GET /index.html 15824 0.043' -
Saída
content: '10.0.0.0 GET /index.html 15824 0.043' ip: '10.0.0.0' method: 'GET'
-
parse-csv
Extrai dados no formato CSV de um campo especificado.
O tipo de dado extraído é VARCHAR. Se um campo extraído tiver o mesmo nome de um campo nos dados de entrada, consulte Retenção e sobrescrita de valores para conhecer a política de retenção de valores.
Não é possível operar nos campos de tempo __time__ e __time_ns_part__. Para mais informações, consulte Campos de tempo.
Sintaxe
| parse-csv -delim=<delim> -quote=<quote> -strict <field> as <output>, ...
Parâmetros
Parâmetro | Tipo | Obrigatório | Descrição |
delim | String | Não | Caractere separador do conteúdo dos dados. Aceita de um a três caracteres ASCII válidos. Use caracteres de escape para representar caracteres especiais. Por exemplo, \t representa tabulação, \11 representa o caractere ASCII com número ordinal octal 11 e \x09 representa o caractere ASCII com número ordinal hexadecimal 09. Também é possível usar separadores com múltiplos caracteres, como O valor padrão é vírgula (,). |
quote | Char | Não | Caractere de aspas do conteúdo dos dados. Deve ser um único caractere ASCII válido, usado quando o conteúdo contém o separador. Exemplos: aspas duplas ("), aspas simples (') e caractere invisível (0x01). Por padrão, nenhum caractere de aspas é usado. Importante Este parâmetro só tem efeito quando delim é um único caractere. Seu valor não pode ser igual ao valor de delim. |
strict | Bool | Não | Defina se a correspondência estrita deve ser ativada quando o número de valores no conteúdo não corresponder ao número de campos especificados em
Esse recurso está desativado por padrão. Para ativá-lo, adicione este parâmetro. |
field | Campo | Sim | Nome do campo source a analisar. O conteúdo dos dados deve incluir este campo. O campo deve ser do tipo |
output | Campo | Sim | Nome do campo usado para armazenar o conteúdo analisado. |
Exemplos
-
Exemplo 1: Correspondência simples de dados.
-
Instrução SPL
* | parse-csv content as x, y, z -
Dados de entrada
content: 'a,b,c' -
Saída
content: 'a,b,c' x: 'a' y: 'b' z: 'c'
-
-
Exemplo 2: Uso das aspas duplas padrão (") como caractere de aspas para corresponder a conteúdo com caracteres especiais.
-
Instrução SPL
* | parse-csv content as ip, time, host -
Dados de entrada
content: '192.168.0.100,"10/Jun/2019:11:32:16,127 +0800",example.aliyundoc.com' -
Saída
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'
-
-
Exemplo 3: Uso de separador com múltiplos caracteres.
-
Instrução SPL
* | parse-csv -delim='||' content as time, ip, req -
Dados de entrada
content: '05/May/2022:13:30:28||127.0.0.1||POST /put?a=1&b=2' -
Saída
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
Extrai os pares chave-valor da primeira camada de um campo especificado em formato JSON.
O tipo de dado extraído é VARCHAR. Se um campo extraído tiver o mesmo nome de um campo nos dados de entrada, consulte Retenção e sobrescrita de valores para conhecer a política de retenção de valores.
Não é possível operar nos campos de tempo __time__ e __time_ns_part__. Para mais informações, consulte Campos de tempo.
Sintaxe
| parse-json -mode=<mode> -path=<path> -prefix=<prefix> <field>
Parâmetros
Parâmetro | Tipo | Obrigatório | Descrição |
mode | String | Não | Especifique o modo de valor do resultado caso um novo campo tenha o mesmo nome de um campo existente nos dados de entrada. O valor padrão é overwrite. |
path | JSONPath | Não | Especifique o caminho JSON no conteúdo do campo para localizar o trecho a extrair. O valor padrão é uma string vazia, o que indica extração direta de todo o conteúdo do campo especificado. |
prefix | String | Não | Prefixo dos campos resultantes após a expansão da estrutura JSON. O valor padrão é uma string vazia. |
field | Campo | Sim | Nome do campo source a analisar. Os dados de entrada devem conter este campo, seu valor não pode ser null e uma das seguintes condições deve ser atendida. Caso contrário, a extração não ocorre.
|
Exemplos
-
Exemplo 1: Extração de todos os pares chave-valor do campo y.
-
Instrução SPL
* | parse-json y -
Dados de entrada
x: '0' y: '{"a": 1, "b": 2}' -
Saída
x: '0' y: '{"a": 1, "b": 2}' a: '1' b: '2'
-
-
Exemplo 2: Extração do valor da chave body do campo content e, em seguida, extração de todos os seus pares chave-valor.
-
Instrução SPL
* | parse-json -path='$.body' content -
Dados de entrada
content: '{"body": {"a": 1, "b": 2}}' -
Saída
content: '{"body": {"a": 1, "b": 2}}' a: '1' b: '2'
-
-
Exemplo 3: Definição do modo de saída de valor do campo como preserve para manter os valores originais dos campos existentes.
-
Instrução SPL
* | parse-json -mode='preserve' y -
Dados de entrada
a: 'xyz' x: '0' y: '{"a": 1, "b": 2}' -
Saída
x: '0' y: '{"a": 1, "b": 2}' a: 'xyz' b: '2'
-
parse-kv
Extrai pares chave-valor de um campo especificado.
O tipo de dado extraído é VARCHAR. Se um campo extraído tiver o mesmo nome de um campo nos dados de entrada, consulte Retenção e sobrescrita de valores para conhecer a política de retenção de valores.
Não é possível operar nos campos de tempo __time__ e __time_ns_part__. Para mais informações, consulte Campos de tempo.
Sintaxe
Extração por separador
Extrai pares chave-valor com base em separadores especificados.
| parse-kv -mode=<mode> -prefix=<prefix> -greedy <field>, <delim>, <kv-sep>
Extração por expressão regular
Extrai pares chave-valor com base em uma expressão regular especificada.
| parse-kv -regexp -mode=<mode> -prefix=<prefix> <field>, <pattern>
Parâmetros
Extração por separador
Parâmetro | Tipo | Obrigatório | Descrição |
mode | String | Não | Se o campo de destino correspondente já existir nos dados de entrada, selecione um modo de sobrescrita de dados. O valor padrão é overwrite. Para mais informações, consulte Verificação de extração de campo e modos de sobrescrita. |
prefix | String | Não | Prefixo dos nomes dos campos de saída com os resultados da extração. O valor padrão é uma string vazia. |
greedy | Bool | Não | Ative a correspondência gulosa para valores de campo.
|
field | Campo | Sim | Nome do campo source a analisar.
|
delim | Char | Sim | Caractere separador entre pares chave-valor distintos. Aceita de um a cinco caracteres ASCII válidos, como Não é possível especificar uma substring de |
kv-sep | Char | Sim | Caractere que conecta chave e valor dentro de um par chave-valor. Aceita de um a cinco caracteres ASCII válidos, como Não é possível especificar uma substring de |
Extração por expressão regular
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
regexp |
Bool |
Sim |
Ative o modo de extração por expressão regular. |
|
mode |
String |
Não |
Se o campo de destino correspondente já existir nos dados de entrada, selecione um modo de sobrescrita de dados. O valor padrão é overwrite. Para mais informações, consulte Verificação de extração de campo e modos de sobrescrita. |
|
prefix |
String |
Não |
Prefixo dos nomes dos campos de saída com os resultados da extração. O valor padrão é uma string vazia. |
|
field |
Campo |
Sim |
Nome do campo source a extrair. Os dados de entrada devem conter este campo. O campo deve ser do tipo |
|
pattern |
RegExpr |
Sim |
Expressão regular com dois grupos de captura. O primeiro extrai o nome do campo; o segundo, o valor do campo. Há suporte à sintaxe RE2. |
Exemplos
-
Exemplo 1: Uso de separadores com múltiplos caracteres para extrair rótulos de dados de métricas do SLS como campos de dados.
-
Instrução SPL
* | parse-kv -prefix='__labels__.' __labels__, '|', '#$#' -
Dados de entrada
__name__: 'net_in' __value__: '231461.57374215033' __time_nano__: '1717378679274117026' __labels__: 'cluster#$#sls-etl|hostname#$#iZbp17raa25u0xi4wifopeZ|interface#$#veth02cc91d2|ip#$#192.168.22.238' -
Dados de saída
__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'
-
-
Exemplo 2: Ativação do modo de correspondência gulosa para extrair pares chave-valor de logs de acesso.
-
Instrução SPL
* | parse-kv -greedy content, ' ', '=' -
Dados 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' -
Dados de saída
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'
-
-
Exemplo 3: Uso do modo de extração por expressão regular para lidar com delimitadores e separadores complexos em pares chave-valor.
-
Instrução SPL
* | parse-kv -regexp content, '([^&?]+)(?:=|:)([^&?]+)' -
Dados de entrada
content: 'k1=v1&k2=v2?k3:v3' k1: 'xyz' -
Dados de saída
content: 'k1=v1&k2=v2?k3:v3' k1: 'v1' k2: 'v2' k3: 'v3'
-
-
Exemplo 4: Definição do modo de saída de valor do campo como preserve para manter os valores originais dos campos existentes.
-
Instrução SPL
* | parse-kv -regexp -mode='preserve' content, '([^&?]+)(?:=|:)([^&?]+)' -
Dados de entrada
content: 'k1=v1&k2=v2?k3:v3' k1: 'xyz' -
Saída
content: 'k1=v1&k2=v2?k3:v3' k1: 'xyz' k2: 'v2' k3: 'v3'
-