ElasticSearchに待望のSQLスタイルJOIN機能が導入
(elastic.co)- 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から開始可能
まだコメントはありません。