Operador PARSE-KV
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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:
- Delimitador especificado: Extração baseada em delimitadores especificados que ditam como chaves/valores e pares são separados uns dos outros.
- Delimitador 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ãoas
(
KeysList)
with
(
pair_delimiter
=
PairDelimiter,
kv_delimiter
=
KvDelimiter [,
quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] [,
greedy
=
true
] )
Delimitador não especificado
T|
parse-kv
expressãoas
(
KeysList)
with
(
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] )
Regex
T|
parse-kv
expressãoas
(
KeysList)
with
(
regex
=
RegexPattern)
)
Saiba mais sobre convenções de sintaxe.
Parâmetros
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 |