3 points par GN⁺ 2025-04-19 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • ES 8.18 introduit la commande LOOKUP JOIN d’ES|QL, qui permet la corrélation et l’enrichissement des données
  • Plus simple à configurer et à administrer que la fonction ENRICH existante, elle est utile pour les jointures de données, la corrélation d’événements de sécurité et la fusion d’informations d’inventaire
  • Introduction d’un nouveau mode lookup index basé sur un shard unique, conçu spécialement pour les JOIN — il peut stocker jusqu’à 2 milliards de documents
  • LOOKUP JOIN gère facilement les jointures plusieurs-à-plusieurs et convient aussi à la spécification dynamique de champs ainsi qu’aux agrégations
  • Via Kibana ou l’API, il est facile de créer un index lookup à partir d’un CSV ; des fonctions INNER JOIN et de sous-requêtes sont également prévues

ES|QL a enfin un vrai JOIN : présentation de LOOKUP JOIN

Elasticsearch permet désormais les JOIN de style SQL

  • Depuis Elasticsearch 8.18, ES|QL prend en charge LOOKUP JOIN
  • Il s’agit d’un LEFT OUTER JOIN, et les données « à droite » sont gérées via le nouveau mode d’index lookup
  • Exemples :
    • fusionner des noms d’environnement (dev, QA, prod) selon l’adresse IP
    • ajouter aux événements de sécurité des informations sur les employés, les actifs ou la threat intelligence
    • analyser les environnements selon les codes de réponse dans les logs web

Différences avec ENRICH

  • Approche ENRICH

    • il faut configurer à l’avance une policy basée sur un index
    • à chaque modification des données, il faut relancer la policy
    • en cas de correspondances multiples, le résultat est renvoyé dans un champ multivalué, ce qui complique le post-traitement
    • peu adapté aux agrégations et aux analyses statistiques
    • convient aux données statiques (informations de référence qui changent très peu)
  • Approche LOOKUP JOIN

    • utilisable immédiatement, sans policy séparée
    • comme l’index peut être modifié directement, les changements sont reflétés immédiatement
    • en cas de correspondances multiples, les résultats sont séparés ligne par ligne, ce qui facilite l’analyse
    • optimisé pour les groupements et les agrégations (ex. : somme du trafic par utilisateur)
    • avantageux aussi pour des données dynamiques et fréquemment mises à jour

Exemples d’utilisation

FROM kibana_sample_data_logs   
| WHERE response.keyword != "200"   
| LOOKUP JOIN envs_lkp ON clientip   
| STATS COUNT(*) by response, environment  
  • analyser où surviennent les erreurs HTTP en joignant les données d’environnement par IP

  • on peut aussi joindre les informations de propriété des équipes pour identifier les serveurs problématiques et l’équipe qui les gère

    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  
    

Comment créer un index lookup

  • Depuis l’interface Kibana : Stack Management → Index Management → Create index

  • Via l’API REST :

    PUT mylookupindex  
    {  
      "settings": {  
        "index.mode": "lookup"  
      }  
    }  
    
  • Il est aussi possible d’uploader un CSV via le File Upload de machine learning, puis de définir le mode lookup lors de la création de l’index

Points d’attention et conseils

  • Comme les JOIN sont des opérations coûteuses, pour les champs souvent utilisés il faut envisager ENRICH + ingest-time denormalization plutôt que lookup
  • Le lookup index est constitué d’un shard unique et limité à 2 milliards de documents
  • Il peut aussi être interrogé directement, comme une requête classique, avec FROM <lookup_index>
  • L’ingestion de données est aussi possible via Logstash ou Elastic Agent (mais pas en data stream)

Feuille de route

  • La prise en charge de INNER JOIN, SUBQUERY et des jointures sur des index classiques est également prévue
  • Une interface permettant de créer et modifier directement des index lookup dans Kibana est en préparation
    • par exemple : glisser-déposer un CSV dans Discover → création automatique de l’index
    • une fonction de gestion des lookup basée sur une GUI est aussi prévue (une maquette a déjà été dévoilée)

En résumé et pour commencer

  • LOOKUP JOIN est encore une technical preview avant la release officielle, mais c’est une fonction capable de faire passer ES|QL à un nouveau niveau
  • Il est possible de démarrer avec Elasticsearch 8.18 ou 9.0 sur Elastic Cloud

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.