- ES 8.18 đã bổ sung lệnh LOOKUP JOIN của ES|QL, cho phép tương quan và làm giàu dữ liệu
- Dễ thiết lập và quản lý hơn tính năng ENRICH hiện có, đồng thời hữu ích cho việc join dữ liệu, phân tích tương quan sự kiện bảo mật và hợp nhất thông tin tài sản
- Giới thiệu chế độ
lookup indexdựa trên single shard được thiết kế mới cho JOIN — có thể lưu trữ tối đa 2 tỷ tài liệu LOOKUP JOINxử lý dễ dàng join nhiều-nhiều, đồng thời phù hợp với chỉ định trường động và các chức năng tổng hợp- Có thể dễ dàng tạo lookup index từ CSV qua Kibana hoặc API, và trong tương lai cũng sẽ có INNER JOIN cùng tính năng subquery
ES|QL cuối cùng đã có JOIN thực thụ: Giới thiệu tính năng LOOKUP JOIN
Giờ đây Elasticsearch cũng hỗ trợ JOIN kiểu SQL
- Từ Elasticsearch 8.18, ES|QL hỗ trợ
LOOKUP JOIN - Đây là dạng LEFT OUTER JOIN, trong đó dữ liệu ở “phía phải” được quản lý thông qua chế độ
lookupindex mới - Ví dụ:
- Hợp nhất tên môi trường (dev, QA, prod) theo địa chỉ IP
- Bổ sung thông tin nhân viên, thông tin tài sản, threat intelligence... vào sự kiện bảo mật
- Phân tích môi trường theo mã phản hồi trong web log
Khác biệt so với ENRICH hiện có
-
Cách ENRICH
- Cần thiết lập trước policy dựa trên index
- Mỗi khi dữ liệu thay đổi, phải chạy lại policy
- Khi khớp nhiều kết quả sẽ trả về dưới dạng trường đa giá trị, khiến hậu xử lý phức tạp
- Không phù hợp cho phân tích tổng hợp và thống kê
- Phù hợp với dữ liệu tĩnh (thông tin tham chiếu gần như không thay đổi)
-
Cách LOOKUP JOIN
- Có thể dùng ngay mà không cần policy riêng
- Có thể chỉnh sửa trực tiếp index nên thay đổi được phản ánh ngay lập tức
- Khi khớp nhiều kết quả sẽ được tách theo từng hàng, giúp phân tích dễ hơn
- Tối ưu cho grouping và aggregation (ví dụ: tổng lưu lượng theo từng người dùng)
- Cũng có lợi cho dữ liệu động, cập nhật thường xuyên
Ví dụ sử dụng
FROM kibana_sample_data_logs
| WHERE response.keyword != "200"
| LOOKUP JOIN envs_lkp ON clientip
| STATS COUNT(*) by response, environment
-
JOIN dữ liệu môi trường theo IP để phân tích nơi phát sinh lỗi HTTP
-
Cũng có thể JOIN thông tin ownership của team để xác định máy chủ có vấn đề thuộc team nào quản lý
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ách tạo lookup index
-
Qua Kibana UI: Stack Management → Index Management → Create index
-
Qua REST API:
PUT mylookupindex { "settings": { "index.mode": "lookup" } } -
Có thể đặt chế độ
lookupkhi tải CSV lên qua Machine Learning File Upload và tạo index
Lưu ý và mẹo
- Vì JOIN là phép toán nặng, với các trường dùng thường xuyên hãy cân nhắc ENRICH + ingest-time denormalization thay vì
lookup lookup indexđược cấu thành từ single shard và bị giới hạn tối đa 2 tỷ tài liệu- Cũng có thể truy vấn trực tiếp như truy vấn thông thường với
FROM <lookup_index> - Có thể nạp dữ liệu qua Logstash hoặc Elastic Agent (tuy nhiên không phải data stream)
Kế hoạch sắp tới
- Cũng sẽ hỗ trợ INNER JOIN, SUBQUERY, join với index thông thường
- Dự kiến cung cấp ngay trong Kibana UI để tạo và chỉnh sửa lookup index
- Ví dụ: kéo thả CSV trong Discover → tự động tạo index
- Dự kiến cung cấp tính năng quản lý Lookup dựa trên GUI (mockup cũng đã được công bố)
Tóm tắt và bắt đầu
LOOKUP JOINhiện là technical preview trước bản phát hành chính thức, nhưng là tính năng có thể đưa ES|QL lên một tầm cao mới- Có thể bắt đầu với Elasticsearch 8.18 hoặc 9.0 trên Elastic Cloud
Chưa có bình luận nào.