Partilhar via


Operador PARSE-KV

Aplica-se a: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

Extrai informações estruturadas de uma expressão de cadeia de caracteres e representa as informações em um formulário de chave/valor.

Os seguintes modos de extração são suportados:

Sintaxe

Delimitador especificado

T|parse-kvexpressãoas(KeysList)with(pair_delimiter=PairDelimiter,kv_delimiter=KvDelimiter [,quote=QuoteChars ... [,escape=EscapeChar ...]] [,greedy=true] )

Delimitador não especificado

T|parse-kvexpressãoas(KeysList)with( [quote=QuoteChars ... [,escape=EscapeChar ...]] )

Regex

T|parse-kvexpressãoas(KeysList)with(regex=RegexPattern))

Saiba mais sobre convenções de sintaxe.

Parâmetros

Designação Tipo Necessário Descrição
Expressão string ✔️ A expressão da qual extrair valores-chave.
KeysList string ✔️ Uma lista separada por vírgulas de nomes de chaves e seus tipos de dados de valor. A ordem das teclas não tem de corresponder à ordem em que aparecem no texto.
PairDelimiter string Um delimitador que separa pares de valores de chave uns dos outros.
KvDelimiter string Um delimitador que separa chaves de valores.
QuoteChars string Um literal de cadeia de caracteres de um ou dois caracteres que representa aspas de abertura e fechamento com as quais o nome da chave ou o valor extraído podem ser encapsulados. O parâmetro pode ser repetido para especificar um conjunto separado de cotações de abertura/fechamento.
EscapeChar string Um literal de cadeia de caracteres de um caractere que descreve um caractere que pode ser usado para escapar de caracteres especiais em um valor entre aspas. O parâmetro pode ser repetido se vários caracteres de escape forem usados.
RegexPattern string Uma expressão regular contendo dois grupos de captura exatamente. O primeiro grupo representa o nome da chave e o segundo grupo representa o valor da chave.

Devoluções

A expressão tabular de entrada original T, estendida com colunas por chaves especificadas para extrair.

Observação

  • Se uma chave não aparecer em um registro, o valor da coluna correspondente será null ou uma cadeia de caracteres vazia, dependendo do tipo de coluna.
  • Somente as chaves listadas no operador são extraídas.
  • A primeira aparência de uma chave é extraída e os valores subsequentes são ignorados.
  • Quando você extrai chaves e valores, os espaços em branco à esquerda e à direita são ignorados.

Exemplos

Os exemplos nesta seção mostram como usar a sintaxe para ajudá-lo a começar.

Extração com delimitadores bem definidos

Nesta consulta, chaves e valores são separados por delimitadores bem definidos. Estes delímetros são vírgulas e dois pontos.

print str="ThreadId:458745723, Machine:Node001, Text: The service is up, Level: Info"
| parse-kv str as (Text: string, ThreadId:long, Machine: string) with (pair_delimiter=',', kv_delimiter=':')
| project-away str

Output

Texto ThreadId Máquina
O serviço está em alta 458745723 Nó001

Extração com cotação de valor

Às vezes, os nomes ou valores das chaves são agrupados entre aspas, o que permite que os próprios valores contenham caracteres delimitadores. Os exemplos a seguir mostram como um argumento quote é usado para extrair esses valores.

print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="connection aborted" "event time"=2021-01-01T10:00:54'
| parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"')
| project-away str

Output

Hora do evento SRC horário de verão Bytes fracasso
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 conexão abortada

Esta consulta usa diferentes aspas de abertura e fechamento:

print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure=(connection aborted) (event time)=(2021-01-01 10:00:54)'
| parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='()')
| project-away str

Output

Hora do evento SRC horário de verão Bytes fracasso
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 conexão abortada

Os próprios valores podem conter caracteres de aspas com escape adequado, como mostra o exemplo a seguir:

print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="the remote host sent \\"bye!\\"" time=2021-01-01T10:00:54'
| parse-kv str as (['time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"', escape='\\')
| project-away str

Output

Hora SRC horário de verão Bytes fracasso
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 O host remoto enviou "Bye!"

Extração em modo ganancioso

Há casos em que valores não cotados podem conter delimitadores de pares. Nesse caso, use o modo greedy para indicar ao operador para verificar até a próxima aparência de chave (ou fim da cadeia de caracteres) ao procurar a terminação do valor.

Os exemplos a seguir comparam como o operador trabalha com e sem o modo de greedy especificado:

print str='name=John Doe phone=555 5555 city=New York'
| parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=')
| project-away str

Output

Designação Telefone cidade
John 555 Novo
print str='name=John Doe phone=555 5555 city=New York'
| parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=', greedy=true)
| project-away str

Output

Designação Telefone cidade
João Doe 555 5555 Nova Iorque

Extração sem delimitadores bem definidos

No exemplo a seguir, qualquer caractere não alfanumérico é considerado um delimitador válido:

print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: Started"
| parse-kv str as (Text: string, ThreadId:long, Machine: string)
| project-away str

Output

Texto ThreadId Máquina
Início 458745723 Nó001

A cotação e a fuga de valores são permitidas neste modo, conforme mostrado no exemplo a seguir:

print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: 'The service \\' is up'"
| parse-kv str as (Text: string, ThreadId:long, Machine: string) with (quote="'", escape='\\')
| project-away str

Output

Texto ThreadId Máquina
O serviço ' está em alta 458745723 Nó001

Extração utilizando regex

Quando nenhum delimitador define a estrutura do texto o suficiente, a extração baseada em expressão regular pode ser útil.

print str=@'["referer url: https://hostname.com/redirect?dest=/?h=1234", "request url: https://hostname.com/?h=1234", "advertiser id: 24fefbca-cf27-4d62-a623-249c2ad30c73"]'
| parse-kv str as (['referer url']:string, ['request url']:string, ['advertiser id']: guid) with (regex=@'"([\w ]+)\s*:\s*([^"]*)"')
| project-away str

Output

URL do Referer url de solicitação ID do anunciante
https://hostname.com/redirect?dest=/?h=1234 https://hostname.com/?h=1234 24fefbca-cf27-4d62-a623-249c2ad30c73