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 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 | city |
---|---|---|
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 | city |
---|---|---|
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 |