operador parse-kv

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

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

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

  • Deletímetro especificado: extração com base em delimitadores especificados que determinam como as chaves/valores e os pares são separados uns dos outros.
  • Delicímetro não especificado: extração sem necessidade de especificar delimitadores. Qualquer caractere não alfanumérico é considerado um delimitador.
  • Regex: Extração baseada em expressões regulares.

Sintaxe

Delimitador especificado

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

Delimitador não especificado

T | parse-kv Expressão ( as KeysList with ( ) [ =quote QuoteChars ... , escape =[ EscapeChar ...]])

Regex

Expressão as ( T | parse-kv KeysList = regex with ( ) RegexPattern) )

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Digitar Obrigatória Descrição
Expression string ✔️ A expressão da qual extrair valores-chave.
Lista de chaves string ✔️ Uma lista separada por vírgulas de nomes de chave e seus tipos de dados de valor. A ordem das chaves não precisa corresponder à ordem em que elas aparecem no texto.
Delimitador de pares string Um delimitador que separa pares de valores-chave uns dos outros.
KvDelimiter string Um delimitador que separa chaves de valores.
Caracteres de citação 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 pode ser encapsulado. O parâmetro pode ser repetido para especificar um conjunto separado de aspas de abertura/fechamento.
EscapeChar string Um literal de cadeia de caracteres de um caractere que descreve um caractere que pode ser usado para escapar caracteres especiais em um valor entre aspas. O parâmetro pode ser repetido se vários caracteres de escape forem usados.
Padrão Regex string Uma expressão regular que contém exatamente dois grupos de captura. 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 a serem extraídas.

Observação

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

Exemplos

Extração com delimitadores bem definidos

No exemplo a seguir, as chaves e os valores são separados por delimitadores bem definidos. Esses delímetros são caracteres de vírgula 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

Saída

Texto ThreadId Computador
O serviço está ativo 458745723 Nó001

Extração com cotação de valor

Às vezes, os nomes ou valores de chave são agrupados entre aspas, o que permite que os próprios valores contenham caracteres delimitadores. Os exemplos a seguir mostram como um quote argumento é 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

Saída

horário do evento src dst bytes falha
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 conexão abortada

O exemplo a seguir usa aspas de abertura e fechamento diferentes:

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

Saída

horário do evento src dst bytes falha
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

Saída

time src dst bytes falha
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 O host remoto enviou "Tchau!"

Extração no modo ganancioso

Há casos em que valores sem aspas podem conter delimitadores de pares. Nesse caso, use o greedy modo para indicar ao operador para verificar até a próxima aparição da chave (ou final da string) ao procurar o final do valor.

Os exemplos a seguir comparam como o operador funciona com e sem o greedy modo 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

Saída

name phone 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

Saída

name phone cidade
Júlio Silva 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

Saída

Texto ThreadId Computador
Iniciado 458745723 Nó001

Os valores entre aspas e escape são permitidos 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

Saída

Texto ThreadId Computador
O serviço ' está no ar 458745723 Nó001

Extração usando regex

Quando nenhum delimitador define a estrutura do texto bem 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

Saída

URL de referência URL da solicitação ID do anunciante
https://hostname.com/redirect?dest=/?h=1234 https://hostname.com/?h=1234 24FEFBCA-CF27-4D62-A623-249C2AD30C73