Operador parse-kv
Extrae información estructurada de una expresión de cadena y representa la información en formato de clave-valor.
Se admiten los siguientes modos de extracción:
- Delimeter especificado: extracción basada en delimitadores especificados que dictan cómo las claves y los pares se separan entre sí.
- Delimeter no especificado: extracción sin necesidad de especificar delimitadores. Cualquier carácter nonalphanumeric se considera un delimitador.
- Regex: extracción basada en expresiones regulares.
Syntax
Delimeter especificado
T|
parse-kv
Expresiónas
(
KeysList)
with
(
pair_delimiter
=
PairDelimiter,
kv_delimiter
=
KvDelimiter [,
quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] [,
greedy
=
true
] )
Delimitador no especificado
T|
parse-kv
Expresiónas
(
KeysList)
with
(
[quote
=
QuoteChars ... [,
escape
=
EscapeChar ...]] )
Regex
T|
parse-kv
Expresiónas
(
KeysList)
with
(
regex
=
RegexPattern)
)
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
Nombre | Tipo | Requerido | Descripción |
---|---|---|---|
Expression | string |
✔️ | Expresión de la que se van a extraer los valores de clave. |
KeysList | string |
✔️ | Lista separada por comas de nombres de clave y sus tipos de datos de valor. El orden de las claves no tiene que coincidir con el orden en que aparecen en el texto. |
PairDelimiter | string |
Delimitador que separa los pares clave-valor entre sí. | |
KvDelimiter | string |
Delimitador que separa las claves de los valores. | |
QuoteChars | string |
Literal de cadena de uno o dos caracteres que representa comillas de apertura y cierre con las que se puede encapsular el nombre de clave o el valor extraído. El parámetro se puede repetir para especificar un conjunto independiente de comillas de apertura y cierre. | |
EscapeChar | string |
Literal de cadena de un carácter que describe un carácter que se puede usar para escapar caracteres especiales en un valor entre comillas. El parámetro se puede repetir si se usan varios caracteres de escape. | |
RegexPattern | string |
Expresión regular que contiene dos grupos de captura exactamente. El primer grupo representa el nombre de clave y el segundo grupo representa el valor de clave. |
Devoluciones
Expresión tabular de entrada original T, extendida con columnas por claves especificadas que se van a extraer.
Nota
- Si una clave no aparece en un registro, el valor de columna correspondiente será
null
o una cadena vacía, dependiendo del tipo de columna. - Solo se extraen las claves que aparecen en el operador .
- Se extrae la primera apariencia de una clave y se omiten los valores posteriores.
- Al extraer claves y valores, se omiten los espacios en blanco iniciales y finales.
Ejemplos
Extracción con delimitadores bien definidos
En el ejemplo siguiente, las claves y los valores están separados por delimitadores bien definidos. Estos delimeters son caracteres de coma y dos puntos.
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
Salida
Texto | ThreadId | Máquina |
---|---|---|
El servicio está actualizado | 458745723 | Node001 |
Extracción con comillas de valor
A veces, los nombres de clave o los valores se encapsulan entre comillas, lo que permite que los propios valores contengan caracteres delimitadores. En los ejemplos siguientes se muestra cómo se usa un quote
argumento para extraer dichos 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
Salida
la hora del evento | src | dst | bytes | failure |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | conexión anulada |
En el ejemplo siguiente se usan comillas de apertura y cierre 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
Salida
la hora del evento | src | dst | bytes | failure |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | conexión anulada |
Los propios valores pueden contener caracteres de comillas con escape correctos, como se muestra en el ejemplo siguiente:
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
Salida
time | src | dst | bytes | failure |
---|---|---|---|---|
2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | el host remoto enviado "bye!" |
Extracción en modo expansivo
Hay casos en los que los valores sin comillas pueden contener delimitadores de par. En este caso, use el greedy
modo para indicar al operador para examinar hasta la siguiente apariencia de clave (o final de cadena) al buscar el final del valor.
En los ejemplos siguientes se compara cómo funciona el operador con y sin el 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
Salida
name | phone | city |
---|---|---|
John | 555 | Nuevo |
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
Salida
name | phone | city |
---|---|---|
John Doe | 555 5555 | Nueva York |
Extracción sin delimitadores bien definidos
En el ejemplo siguiente, cualquier carácter nonalphanumeric se considera un 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
Salida
Texto | ThreadId | Máquina |
---|---|---|
Iniciado | 458745723 | Node001 |
Los valores entre comillas y escape se permiten en este modo, como se muestra en el ejemplo siguiente:
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
Salida
Texto | ThreadId | Máquina |
---|---|---|
El servicio ' está en marcha | 458745723 | Node001 |
Extracción mediante regex
Cuando ningún delimitador define la estructura de texto suficientemente bien, la extracción basada en expresiones regulares puede 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
Salida
dirección URL del referer | url de solicitud | id. de anunciante |
---|---|---|
https://hostname.com/redirect?dest=/?h=1234 |
https://hostname.com/?h=1234 |
24fefbca-cf27-4d62-a623-249c2ad30c73 |
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de