3 ポイント 投稿者 GN⁺ 2025-04-19 | まだコメントはありません。 | WhatsAppで共有
  • ES 8.18で ES|QLのLOOKUP JOIN コマンドが導入され、データの相関付けや拡張が可能に
  • 従来のENRICH機能より設定と管理が容易で、データ結合、セキュリティイベントの相関分析、資産情報の統合などに有用
  • JOINのために新たに設計された 単一シャードベースの「lookup index」モード を導入 — 最大20億ドキュメントまで保存可能
  • LOOKUP JOIN多対多JOINを簡単に処理でき、動的フィールド指定や集計機能にも適している
  • KibanaまたはAPIを通じて CSVから簡単にlookupインデックスを作成でき、今後はINNER JOINやサブクエリ機能も予定されている

ES|QLに本物のJOINがやってきた: LOOKUP JOIN機能の紹介

ElasticsearchでもついにSQLスタイルJOINが可能に

  • Elasticsearch 8.18から ES|QLで LOOKUP JOIN をサポート
  • これは LEFT OUTER JOIN 形式で、「右側」のデータは新しい lookup インデックスモードで管理される
  • 例:
    • IPアドレスに応じて環境名(dev, QA, prod)を結合
    • セキュリティイベントに従業員情報、資産情報、脅威インテリジェンスなどを追加
    • Webログでレスポンスコード別の環境分析

従来のENRICHとの違い

  • ENRICH方式

    • インデックスベースの ポリシーを事前に設定する必要がある
    • データが変更されるたびに ポリシーを再実行する必要がある
    • 複数マッチ時は複数値フィールドとして返される ため、後処理が複雑になる
    • 集計や統計分析には不向き
    • 静的データ(ほとんど変更のない参照情報) に適している
  • LOOKUP JOIN方式

    • 別途ポリシーなしですぐに利用可能
    • インデックスを直接修正できるため、変更が即座に反映される
    • 複数マッチ時は行単位に分割されるため分析しやすい
    • グループ化と集計に最適化されている(例: ユーザーごとのトラフィック合計)
    • 動的で頻繁に更新されるデータ にも有利

使用例

FROM kibana_sample_data_logs   
| WHERE response.keyword != "200"   
| LOOKUP JOIN envs_lkp ON clientip   
| STATS COUNT(*) by response, environment  
  • IPごとの環境データをJOINしてHTTPエラー発生箇所を分析

  • チーム所有情報もJOINして、どのチームが管理するサーバーで問題が起きているか把握可能

    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  
    

Lookupインデックスの作成方法

  • Kibana UIから: Stack Management → Index Management → Create index

  • REST APIから:

    PUT mylookupindex  
    {  
      "settings": {  
        "index.mode": "lookup"  
      }  
    }  
    
  • Machine Learning File UploadでCSVをアップロードし、インデックス作成時に lookup モードを設定可能

注意点とヒント

  • JOINは重い処理 のため、よく使うフィールドでは lookup の代わりに ENRICH + ingest-time denormalization を検討
  • lookup index は単一シャードで構成されており、最大20億ドキュメントの制限 がある
  • 通常のクエリと同様に FROM <lookup_index> で直接参照することも可能
  • LogstashやElastic Agent経由でもデータ投入可能(ただしdata streamではない)

今後の計画

  • INNER JOIN、SUBQUERY、通常インデックス同士のJOIN もサポート予定
  • Kibana内で直接 lookupインデックスの作成・編集UIを提供予定
    • 例: DiscoverでCSVをドラッグ&ドロップ → 自動でインデックス作成
    • GUIベースのLookup管理機能 も提供予定(モックアップも公開済み)

まとめと始め方

  • LOOKUP JOIN正式リリース前のテクニカルプレビュー だが、ES|QLを新たなレベルへ引き上げうる機能
  • Elastic CloudでElasticsearch 8.18または9.0から開始可能

まだコメントはありません。

まだコメントはありません。