Cómo usar el operador parse en KQL: paso a paso
El operador parse en KQL convierte texto no estructurado — como líneas de log o mensajes de diagnóstico — en columnas ordenadas y listas para analizar. En lugar de escribir expresiones regulares complicadas, describes el texto tal como aparece y KQL extrae cada campo por ti. Es una de las formas más rápidas de separar valores como usuario, acción, IP o duración a partir de una única columna en bruto.
Requisitos previos
- Acceso a un entorno que ejecute KQL: un KQL Queryset en Microsoft Fabric (Real-Time Intelligence), Azure Data Explorer, Azure Monitor o Microsoft Sentinel.
- Conocimientos básicos de consultas KQL, en especial el pipe
|y el operadorproject. - No necesitas cargar datos: generaremos ejemplos con el operador
datatable.
Paso 1: Crear datos de ejemplo
Para practicar sin depender de una tabla real, creamos algunas líneas de log con el operador datatable. Cada línea es un mensaje de texto en el formato clave=valor, el escenario típico donde parse destaca.
datatable(RawLog: string)
[
"User=joao action=login ip=10.0.0.5 durationMs=250",
"User=maria action=logout ip=10.0.0.9 durationMs=87",
"User=rui action=login ip=10.0.0.7 durationMs=143"
]
Ejecuta la consulta. Deberías ver una única columna llamada RawLog con tres líneas de texto. Ese texto es exactamente lo que vamos a dividir en columnas.
Paso 2: Extraer campos con el operador parse
Ahora aplicamos parse para dividir cada mensaje en sus partes. La idea es sencilla: antes de cada valor que quieres capturar, escribes el literal fijo que aparece en el texto (por ejemplo "User=") seguido del nombre de la columna que se va a crear.
datatable(RawLog: string)
[
"User=joao action=login ip=10.0.0.5 durationMs=250",
"User=maria action=logout ip=10.0.0.9 durationMs=87",
"User=rui action=login ip=10.0.0.7 durationMs=143"
]
| parse RawLog with "User=" User " action=" Action " ip=" Ip " durationMs=" DurationMs: long
| project User, Action, Ip, DurationMs
Fíjate en el patrón: los literales "User=", " action=", " ip=" y " durationMs=" actúan como anclas y KQL guarda lo que hay entre ellos. Al final indicamos DurationMs: long para que la duración se lea como número entero y no como texto. Este es el modo simple, el comportamiento por defecto de parse.
Paso 3: Ignorar lo que no interesa con *
Muchas veces el campo útil viene después de un prefijo que no queremos, como una marca de fecha y hora. El carácter * significa "salta todo hasta el siguiente literal". En el ejemplo siguiente descartamos la fecha al inicio de cada línea:
datatable(RawLog: string)
[
"2026-07-15 09:12:03 User=joao durationMs=250",
"2026-07-15 09:12:04 User=maria durationMs=87"
]
| parse RawLog with * "User=" User " durationMs=" DurationMs: long
| project User, DurationMs
El * colocado al principio le indica a parse que ignore todo — la fecha y la hora — hasta encontrar "User=". Así el patrón queda corto y legible. Nota: el * no se puede usar justo después de una columna de texto, solo antes de un literal.
Paso 4: Filtrar y agregar los campos extraídos
Una vez extraídos, los nuevos campos son columnas normales y se pueden combinar con where, summarize o extend. Por ejemplo, para contar cuántos inicios de sesión hay por usuario:
datatable(RawLog: string)
[
"User=joao action=login ip=10.0.0.5 durationMs=250",
"User=maria action=logout ip=10.0.0.9 durationMs=87",
"User=joao action=login ip=10.0.0.5 durationMs=98"
]
| parse RawLog with "User=" User " action=" Action " ip=" Ip " durationMs=" DurationMs: long
| where Action == "login"
| summarize Total = count() by User
El resultado muestra cada usuario con su número de inicios de sesión — información que estaba "atrapada" dentro del texto y que ahora es fácil de medir.
Verificar el resultado
Ejecuta cada consulta y confirma que aparecen las columnas esperadas con los valores correctos. Si una columna aparece vacía (null), casi siempre significa que un literal del patrón no coincide exactamente con el texto: revisa espacios de más, mayúsculas/minúsculas y el nombre de las claves. Cuando el formato del texto varía entre líneas, prueba parse kind=relaxed, que rellena con null solo los campos que no encajan en lugar de descartar toda la línea.
Conclusión
En pocos minutos convertiste texto en bruto en columnas listas para analizar — un paso esencial para tratar logs y telemetría en KQL. A partir de aquí, combina parse con summarize para crear métricas o con render para generar gráficos. Un consejo final: para patrones más irregulares, usa parse kind=regex y describe el texto con expresiones regulares. ¿Qué campos te gustaría extraer de tus propios logs?