- En ES 8.18 se incorporó el comando LOOKUP JOIN de ES|QL, lo que permite correlacionar y enriquecer datos
- Es más fácil de configurar y administrar que la función ENRICH existente, y resulta útil para joins de datos, análisis de correlación de eventos de seguridad y combinación de información de activos
- Se introdujo el nuevo modo
lookup index, diseñado específicamente para JOIN y basado en un solo shard; puede almacenar hasta 2 mil millones de documentos LOOKUP JOINmaneja fácilmente joins de muchos a muchos y también es adecuado para especificación dinámica de campos y agregaciones- A través de Kibana o la API, se pueden crear fácilmente índices lookup a partir de CSV, y más adelante también llegarán INNER JOIN y subconsultas
ES|QL ya tiene un JOIN de verdad: presentación de LOOKUP JOIN
Ahora también se puede hacer JOIN estilo SQL en Elasticsearch
- Desde Elasticsearch 8.18, ES|QL admite
LOOKUP JOIN - Tiene formato LEFT OUTER JOIN, y los datos del “lado derecho” se administran mediante el nuevo modo de índice
lookup - Ejemplos:
- Combinar el nombre del entorno (dev, QA, prod) según la dirección IP
- Agregar a eventos de seguridad información de empleados, activos, inteligencia de amenazas, etc.
- Analizar entornos por código de respuesta en logs web
Diferencias con ENRICH
-
Método ENRICH
- Es necesario configurar previamente una política basada en índices
- Cada vez que los datos cambian, hay que volver a ejecutar la política
- En caso de múltiples coincidencias, devuelve campos multivalor, lo que complica el posprocesamiento
- No es adecuado para agregaciones ni análisis estadístico
- Es apropiado para datos estáticos (información de referencia que casi no cambia)
-
Método LOOKUP JOIN
- Se puede usar de inmediato sin políticas adicionales
- Como el índice puede modificarse directamente, los cambios se reflejan de inmediato
- Con múltiples coincidencias, se separa por filas, lo que facilita el análisis
- Está optimizado para agrupación y agregaciones (por ejemplo, suma de tráfico por usuario)
- También es ventajoso para datos dinámicos y que se actualizan con frecuencia
Ejemplo de uso
FROM kibana_sample_data_logs
| WHERE response.keyword != "200"
| LOOKUP JOIN envs_lkp ON clientip
| STATS COUNT(*) by response, environment
-
Hacer JOIN con datos de entorno por IP para analizar dónde ocurren errores HTTP
-
También se puede hacer JOIN con información de propiedad del equipo para identificar en qué servidores administrados por qué equipo hay problemas
FROM kibana_sample_data_logs | WHERE response.keyword != "200" | LOOKUP JOIN teams_lkp ON host | STATS num = COUNT(*) by host, response.keyword, team | SORT num DESC
Cómo crear un índice lookup
-
Desde la interfaz de Kibana: Stack Management → Index Management → Create index
-
Con la REST API:
PUT mylookupindex { "settings": { "index.mode": "lookup" } } -
Al subir un CSV mediante File Upload de machine learning, también se puede establecer el modo
lookupal crear el índice
Consideraciones y consejos
- Como JOIN es una operación pesada, para campos de uso frecuente conviene considerar ENRICH + ingest-time denormalization en lugar de
lookup - El
lookup indexestá compuesto por un solo shard y tiene un límite máximo de 2 mil millones de documentos - También puede consultarse directamente como una consulta normal con
FROM <lookup_index> - También se pueden ingresar datos mediante Logstash o Elastic Agent (pero no como data stream)
Planes a futuro
- También está previsto el soporte para INNER JOIN, SUBQUERY y joins con índices normales
- También está previsto ofrecer en Kibana una interfaz para crear y editar índices lookup directamente
- Ejemplo: arrastrar y soltar un CSV en Discover → creación automática del índice
- También está prevista una función de administración de Lookup basada en GUI (ya se publicó un mockup)
Resumen y cómo empezar
LOOKUP JOINes un technical preview antes del lanzamiento oficial, pero puede llevar ES|QL a un nuevo nivel- Se puede comenzar con Elasticsearch 8.18 o 9.0 en Elastic Cloud
Aún no hay comentarios.