operador parse-kv
Extrai informações estruturadas de uma expressão de cadeia e representa as informações num formulário chave/valor.
Os seguintes modos de extração são suportados:
- Delimetrizador especificado: extração com base em delimitadores especificados que ditam a forma como as chaves/valores e os pares são separados uns dos outros.
- Delimetrizador não especificado: extração sem necessidade de especificar delimitadores. Qualquer caráter não fantasmagórico é considerado um delimitador.
- Regex: extração com base em expressões regulares.
Syntax
Delimetrador especificado
T|
parse-kv
Expressãoas
(
Lista de Chaves)
with
(
pair_delimiter
=
ParDelimiter,
kv_delimiter
=
KvDelimiter [,
quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] [,
greedy
=
true
] )
Delimitador não específico
T|
parse-kv
Expressãoas
(
Lista de Chaves)
with
(
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] )
Regex
T|
parse-kv
Expressãoas
(
Lista de Chaves)
with
(
regex
=
RegexPattern)
)
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Tipo | Necessário | Descrição |
---|---|---|---|
Expression | string |
✔️ | A expressão a partir da qual extrair valores-chave. |
Lista de Chaves | string |
✔️ | Uma lista separada por vírgulas de nomes de chaves e os respetivos tipos de dados de valor. A ordem das teclas não tem de corresponder à ordem pela qual aparecem no texto. |
ParDelimiter | string |
Um delimitador que separa pares de valores chave uns dos outros. | |
KvDelimiter | string |
Um delimitador que separa as chaves dos valores. | |
QuoteChars | string |
Um literal de cadeia de carateres de um ou dois carateres que representa aspas de abertura e fecho com as quais o nome da chave ou o valor extraído pode ser moldado. O parâmetro pode ser repetido para especificar um conjunto separado de aspas de abertura/fecho. | |
EscapeChar | string |
Um literal de cadeia de carateres de um caráter que descreve um caráter que pode ser utilizado para escapar a carateres especiais num valor citado. O parâmetro pode ser repetido se forem utilizados vários carateres de escape. | |
RegexPattern | string |
Uma expressão regular que contém 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, expandida com colunas por chaves especificadas para extrair.
Nota
- Se uma chave não aparecer num registo, o valor da coluna correspondente será
null
ou uma cadeia vazia, dependendo do tipo de coluna. - São extraídas apenas as chaves listadas no operador.
- O primeiro aspeto de uma chave é extraído e os valores subsequentes são ignorados.
- Ao extrair chaves e valores, os espaços brancos à esquerda e à direita são ignorados.
Exemplos
Extração com delimitadores bem definidos
No exemplo seguinte, as chaves e os valores são separados por delimitadores bem definidos. Estes delimetres são carateres de 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
Saída
Texto | ThreadId | Máquina |
---|---|---|
O serviço está em funcionamento | 458745723 | Nó001 |
Extração com a citação de valores
Por vezes, os nomes ou valores de chave são moldados em aspas, o que permite que os próprios valores contenham carateres delimitadores. Os exemplos seguintes mostram como um quote
argumento é utilizado 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
hora do evento | src | dst | bytes | falha |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | ligação abortada |
O exemplo seguinte utiliza aspas de abertura e fecho 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
hora do evento | src | dst | bytes | falha |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | ligação abortada |
Os próprios valores podem conter carateres de aspas corretamente escapados, como mostra o exemplo seguinte:
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
hora | src | dst | bytes | falha |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | o anfitrião remoto enviou "adeus!" |
Extração no modo ganancioso
Existem casos em que os valores não listados podem conter delimitadores de pares. Neste caso, utilize o greedy
modo para indicar ao operador para analisar até ao aspeto da chave seguinte (ou fim da cadeia) ao procurar o valor que termina.
Os exemplos seguintes comparam a forma 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 | telefone | 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 | telefone | city |
---|---|---|
João Silva | 555 5555 | Nova Iorque |
Extração sem delimitadores bem definidos
No exemplo seguinte, qualquer caráter não fantasmagómico é 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 | Máquina |
---|---|---|
Iniciado | 458745723 | Nó001 |
Os valores que citam e escapam são permitidos neste modo, conforme mostrado no exemplo seguinte:
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 | Máquina |
---|---|---|
O serviço " está em funcionamento | 458745723 | Nó001 |
Extração com regex
Quando nenhum delimitador define uma estrutura de texto suficientemente bem, a extração regular baseada em expressões 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 do referer | url do pedido | ID do anunciante |
---|---|---|
https://hostname.com/redirect?dest=/?h=1234 |
https://hostname.com/?h=1234 |
24fefbca-cf27-4d62-a623-249c2ad30c73 |
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários