Utilize funções de expressão regular para extrair, corresponder, substituir e dividir strings em consultas SQL e SPL.
Funções de expressão regular
O SLS oferece suporte às seguintes funções de expressão regular, todas utilizando a sintaxe RE2.
Para usar strings em instruções analíticas, é obrigatório colocá-las entre aspas simples (''). Strings sem aspas ou entre aspas duplas ("") indicam nomes de campos ou colunas. Por exemplo,
'status'
indica a string status, enquanto
status
ou
"status"
indica o campo de log status.
|
Função |
Sintaxe |
Descrição |
SQL |
SPL |
|
regexp_extract_all(x, regular expression) |
Retorna um array com todas as substrings que correspondem a uma expressão regular. |
√ |
× |
|
|
regexp_extract_all(x, regular expression, n) |
Retorna o grupo de captura especificado de todas as correspondências como um array. |
√ |
× |
|
|
regexp_extract(x, regular expression) |
Retorna a primeira substring que corresponde a uma expressão regular. |
√ |
√ |
|
|
regexp_extract(x, regular expression, n) |
Retorna o n-ésimo grupo de captura da primeira correspondência. |
√ |
√ |
|
|
regexp_extract_bool(x, regular expression) |
Converte a primeira correspondência para BOOLEAN. Retorna |
√ |
× |
|
|
regexp_extract_bool(x, regular expression, n) |
Converte o grupo de captura especificado da primeira correspondência para BOOLEAN. Retorna |
√ |
× |
|
|
regexp_extract_long(x, regular expression) |
Converte a primeira correspondência para BIGINT. Retorna |
√ |
× |
|
|
regexp_extract_long(x, regular expression, n) |
Converte o grupo de captura especificado da primeira correspondência para BIGINT. Retorna |
√ |
× |
|
|
regexp_extract_double(x, regular expression) |
Converte a primeira correspondência para DOUBLE. Retorna |
√ |
× |
|
|
regexp_extract_double(x, regular expression, n) |
Converte o grupo de captura especificado da primeira correspondência para DOUBLE. Retorna |
√ |
× |
|
|
regexp_extract_map(x, regular expression, keys) |
Mapeia as chaves fornecidas para suas correspondências de grupos de captura respectivas. |
√ |
× |
|
|
regexp_extract_map(x, regular expression) |
Mapeia o primeiro grupo de captura como chaves e o segundo como valores. |
√ |
× |
|
|
regexp_like(x, regular expression) |
Verifica se uma string corresponde a uma expressão regular. |
√ |
√ |
|
|
regexp_replace(x, regular expression) |
Remove todas as substrings que correspondem a uma expressão regular. |
√ |
√ |
|
|
regexp_replace(x, regular expression, replace string) |
Substitui todas as substrings que correspondem a uma expressão regular por uma string de substituição. |
√ |
√ |
|
|
regexp_split(x, regular expression) |
Divide uma string com base em uma expressão regular e retorna as substrings resultantes em um array. |
√ |
× |
Para extrair uma aspa simples (') com uma função de expressão regular, faça o escape duplicando-a para ''. O Exemplo 3 da função regexp_extract demonstra essa abordagem.
Função regexp_extract_all
Extrai todas as substrings que correspondem a uma expressão regular de uma string de origem.
Sintaxe
-
Retorna todas as substrings correspondentes como um array.
regexp_extract_all(x, regular expression) -
Retorna todas as correspondências de um grupo de captura especificado como um array.
regexp_extract_all(x, regular expression, n)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
A string de origem. Deve ser do tipo VARCHAR. |
|
regular expression |
A expressão regular. Deve conter grupos de captura quando o parâmetro n for especificado. Por exemplo, |
|
n |
O índice do grupo de captura. Deve ser um número inteiro maior ou igual a 1. |
Valor de retorno
ARRAY
Exemplos
-
Exemplo 1: Extrair todos os dígitos do campo
server_protocol.-
Campo de amostra
server_protocol:HTTP/2.0 -
Instrução de consulta e análise (Testar)
*| SELECT regexp_extract_all(server_protocol, '\d+') Resultados da consulta e análise: A consulta retorna
["2","0"]na coluna_col0, que são todas as substrings numéricas extraídas deHTTP/2.0.
-
-
Exemplo 2: Extrair a substring 'Chrome' do campo
http_user_agente contar as requisições do Chrome.-
Campo de amostra
http_user_agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.803.0 Safari/535.1 -
Instrução de consulta e análise (Testar)
*| SELECT regexp_extract_all(http_user_agent, '(Chrome)',1) AS Chrome, count(*) AS count GROUP BY Chrome Resultados da consulta e análise: A coluna
Chromeretorna["Chrome"]e a colunacountretorna103440.
-
Função regexp_extract
Extrai a primeira substring que corresponde a uma expressão regular de uma string de origem.
Sintaxe
-
Retorna a primeira substring que corresponde a uma expressão regular.
regexp_extract(x, regular expression) -
Retorna a substring que corresponde ao n-ésimo grupo de captura.
regexp_extract(x, regular expression, n)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
A string de origem. Deve ser do tipo VARCHAR. |
|
regular expression |
A expressão regular. Pode conter grupos de captura. Por exemplo, |
|
n |
O índice do grupo de captura (baseado em 1). Deve ser um número inteiro positivo. |
Valor de retorno
Retorna uma string VARCHAR.
Exemplos
SQL
-
Exemplo 1: Extrair o primeiro dígito do campo
server_protocol.-
Campo de amostra
server_protocol:HTTP/2.0 -
Instrução de consulta (Testar)
*|SELECT regexp_extract(server_protocol, '\d+') A consulta retorna uma coluna chamada
_col0com o valor2.
-
-
Exemplo 2: Extrair o nome do arquivo do campo
request_urie contar as requisições por arquivo.-
Campo de amostra
request_uri:/request/path-3/file-5 -
Instrução de consulta (Testar)
* | SELECT regexp_extract(request_uri, '.*\/(file.*)', 1) AS file, count(*) AS count GROUP BY file Resultado de amostra: A coluna file é
file-5e a coluna count é17127.
-
-
Exemplo 3: Extrair a aspa simples (') e os dígitos do campo
message.-
Campo de amostra
message:error'1232 -
Instrução de consulta
* | SELECT regexp_extract(message, '''\d+')NotaPara corresponder a uma aspa simples ('), você deve fazer o escape duplicando-a para
''na string da expressão regular. O resultado é
'1232.
-
SPL
-
Exemplo 1: Extrair o primeiro dígito do campo server_protocol.
Campo de amostra
server_protocol:HTTP/2.0
Instrução de consulta
* | extend a = regexp_extract(server_protocol, '\d+')
Resultado
a: 2
-
Exemplo 2: Extrair a parte do arquivo do campo
request_uri.Campo de amostra
request_uri:/request/path-3/file-5
Instrução de consulta
* | extend a = regexp_extract(request_uri, '.*\/(file.*)',1)
Resultado
O resultado é a: file-5.
-
Exemplo 3: Extrair a aspa simples (') e os dígitos do campo
message.Campo de amostra
message:error'1232
Instrução de consulta
* | extend a = regexp_extract(message, '''\d+')
Nota
Para corresponder a uma aspa simples ('), você deve fazer o escape duplicando-a para '' na string da expressão regular.
Resultado
1 12-19 10:39:33
a: '1232
Função regexp_extract_bool
Extrai a primeira substring correspondente e a converte para BOOLEAN ("true"/"false", sem distinção entre maiúsculas e minúsculas). Retorna null em caso de falha.
Sintaxe
-
Converte a primeira correspondência para BOOLEAN. Retorna
nullem caso de falha.regexp_extract_bool(x, regular expression) -
Converte o grupo de captura especificado da primeira correspondência para BOOLEAN. Retorna
nullem caso de falha.regexp_extract_bool(x, regular expression, n)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
A string de origem. Este parâmetro é do tipo VARCHAR. |
|
regular expression |
Uma expressão regular que contém grupos de captura. Por exemplo, |
|
n |
O índice do grupo de captura a ser extraído. Este parâmetro é um número inteiro baseado em 1. |
Tipo de valor de retorno
Tipo BOOLEAN.
Exemplos
-
Extrair um valor booleano de um campo.
-
Campo de amostra
false -
Instrução de consulta e análise (Testar)
*| select regexp_extract_bool('false', '[a-zA-Z]+') -
Resultados da consulta e análise
Retorna uma única coluna
_col0com uma linha de dados. O valor éfalse.
-
Função regexp_extract_long
Extrai uma substring que corresponde a uma expressão regular e a converte para BIGINT. Retorna null se a conversão falhar.
Sintaxe
-
Extrai a primeira correspondência e a converte para BIGINT.
regexp_extract_long(x, regular expression) -
Converte o grupo de captura especificado da primeira correspondência para BIGINT.
regexp_extract_long(x, regular expression, n)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
A string de origem. Este parâmetro é do tipo VARCHAR. |
|
regular expression |
Uma expressão regular que contém grupos de captura. Por exemplo, |
|
n |
O índice do grupo de captura a ser extraído. O índice é um número inteiro baseado em 1. |
Tipo de valor de retorno
BIGINT
Exemplos
-
Extrair o número do campo
time.-
Campo de amostra
time:19/Dec/2024:06:16:06 -
Instrução de consulta (Testar)
*|SELECT regexp_extract_long(time, '(\d{2})/', 1) -
Resultados da consulta e análise
Retorna uma coluna chamada
_col0que contém duas linhas, cada uma com o valor19.
-
Função regexp_extract_double
Extrai uma substring que corresponde a uma expressão regular e a converte para DOUBLE. Retorna null se a conversão falhar.
Sintaxe
-
Converte a primeira correspondência para DOUBLE. Retorna
nullem caso de falha.regexp_extract_double(x, regular expression) -
Converte o grupo de captura especificado da primeira correspondência para DOUBLE. Retorna
nullem caso de falha.regexp_extract_double(x, regular expression, n)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
A string de origem. Seu tipo deve ser VARCHAR. |
|
regular expression |
Uma expressão regular que contém grupos de captura. Por exemplo, |
|
n |
O índice do grupo de captura a ser extraído. O índice é um número inteiro que começa em 1. |
Tipo de valor de retorno
double
Exemplos
-
Extrair o número de ponto flutuante do campo
server_protocol.-
Campo de amostra
server_protocol:HTTP/1.1 -
Instrução de consulta e análise (Testar)
*|SELECT regexp_extract_double(server_protocol, '\d+\.\d+') -
Resultados da consulta e análise
Retorna uma coluna chamada
_col0. Esta coluna contém duas linhas, cada uma com o valor1.1.
-
Função regexp_extract_map
Extrai substrings que correspondem a grupos de captura em uma expressão regular e as retorna como um mapa de chave-valor.
Sintaxe
Cria um mapa pareando as chaves fornecidas com as substrings correspondidas pelos grupos de captura respectivos.
regexp_extract_map(x, regular expression, keys)
Cria um mapa usando uma expressão regular com dois grupos de captura que correspondem, respectivamente, às chaves e aos valores.
regexp_extract_map(x, regular expression)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
A string de origem a ser pesquisada. O tipo de dados é VARCHAR. |
|
regular expression |
Uma expressão regular que contém grupos de captura. Por exemplo, |
|
keys |
Os nomes das chaves para as substrings capturadas. O tipo de dados é ARRAY(VARCHAR). O número de chaves deve corresponder ao número de grupos de captura na expressão regular. |
Tipo de valor de retorno
MAP(VARCHAR, VARCHAR)
Exemplos
-
Exemplo 1: Extrair o nome do protocolo e a versão do campo server_protocol.
-
Campo de amostra
server_protocol: 'HTTP/2.0' -
Instrução de consulta
select regexp_extract_map(server_protocol, '(\w+)/([\d\.]+)', array['name', 'version']) as protocol -
Resultados da consulta e análise
A consulta retorna o seguinte mapa na coluna protocol:
{"name":"HTTP","version":"2.0"}.
-
-
Exemplo 2: Extrair todos os pares chave-valor do campo content.
-
Campo de amostra
content: 'verb="GET" URI="/healthz" latency="45.911µs" userAgent="kube-probe/1.30+"' -
Instrução de consulta
select regexp_extract_map(content, '(\w+)="([^"]*)"') as args -
Dados de saída
{"latency":"45.911µs","verb":"GET","userAgent":"kube-probe/1.30+","URI":"/healthz"}
-
Função regexp_like
Verifica se uma string corresponde a uma expressão regular.
Sintaxe
regexp_like(x, regular expression)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
A string de origem. Deve ser do tipo VARCHAR. |
|
regular expression |
O padrão de expressão regular a ser correspondido. |
Tipo de valor de retorno
BOOLEAN
Exemplos
SQL
Verificar se o campo server_protocol contém dígitos.
-
Campo de amostra
server_protocol:HTTP/2.0 -
Instrução de consulta e análise (Testar)
*| select regexp_like(server_protocol, '\d+') A consulta retorna duas linhas. Ambos os valores são
true. Isso indica que o valor do campo server_protocol corresponde à expressão regular\d+(contém dígitos).
SPL
Verificar se o campo server_protocol contém dígitos.
Campo de amostra
server_protocol:HTTP/2.0
Instrução de consulta e análise
* |extend a = regexp_like(server_protocol, '\d+')
Resultados da consulta e análise
1 12-18 19:34:20 1.2.3.4
a: true
Função regexp_replace
Remove ou substitui substrings que correspondem a uma expressão regular.
Sintaxe
-
Remove todas as substrings de uma string de origem que correspondem a uma expressão regular.
regexp_replace(x, regular expression) -
Substitui todas as substrings que correspondem a uma expressão regular por uma string de substituição.
regexp_replace(x, regular expression, replace string)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
A string de origem a ser pesquisada. Este parâmetro deve ser do tipo VARCHAR. |
|
regular expression |
O padrão de expressão regular. |
|
replace string |
A string de substituição. Se omitida, as substrings correspondidas serão removidas. |
Tipo de valor de retorno
VARCHAR
Exemplos
SQL
-
Exemplo 1: No campo
region, substitua os nomes de regiões que começam comcnpor China e, em seguida, conte o número de requisições da China.-
Campo de amostra
region:cn-shanghai -
Instrução de consulta e análise (Testar)
* | select regexp_replace(region, 'cn.*','China') AS region, count(*) AS count GROUP BY region Resultados da consulta e análise: A consulta retorna uma única linha onde a coluna region é
Chinae a coluna count é168871.
-
-
Exemplo 2: Remover o número da versão do campo
server_protocole contar as requisições por protocolo.-
Campo de amostra
server_protocol:HTTP/2.0 -
Instrução de consulta e análise (Testar)
*| select regexp_replace(server_protocol, '.\d+') AS server_protocol, count(*) AS count GROUP BY server_protocol Resultados da consulta e análise: A consulta retorna uma única linha onde
server_protocoléHTTPecounté168871.
-
SPL
-
Exemplo 1: Substituir todos os nomes de regiões no valor do campo
regionque começam com 'cn' por China.Campo de amostra
region:cn-shanghai
Instrução de consulta e análise
* | extend a = regexp_replace(region, 'cn.*','China')
-
Resultados da consulta e análise
1 12-18 19:34:20 1.2.3.4 a: China -
Exemplo 2: Excluir o número da versão do valor do campo
server_protocol.Campo de amostra
server_protocol:HTTP/2.0
Instrução de consulta e análise (Testar)
* | extend a = regexp_replace(server_protocol, '.\d+')
Resultados da consulta e análise
A consulta retorna uma entrada de log que inclui um carimbo de data/hora, o endereço IP de destino 1.2.3.4 e o campo server_protocol com o número da versão removido.
Função regexp_split
Divide uma string de origem em um array de substrings usando uma expressão regular como delimitador.
Sintaxe
regexp_split(x, regular expression)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
A string de origem. Seu tipo de dados é VARCHAR. |
|
regular expression |
O padrão de expressão regular usado como delimitador. |
Tipo de valor de retorno
array
Exemplo
Use uma barra (/) para dividir o valor do campo request_uri.
-
Campo de amostra
request_uri:/request/path-0/file-7 -
Instrução de consulta e análise (Testar)
* | SELECT regexp_split(request_uri,'/') Os resultados da consulta e análise são
["","request","path-0","file-7"].