3 điểm bởi GN⁺ 2025-04-19 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • 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 index dự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 JOIN xử 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ế độ lookup index 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ế độ lookup khi tải CSV lên qua Machine Learning File Upload và tạo index

Lưu ý và mẹo

  • 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 JOIN hiệ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.

Chưa có bình luận nào.