- ES 8.18에 ES|QL의 LOOKUP JOIN 명령어가 도입되어 데이터 상관관계 및 보강이 가능해짐
- 기존 ENRICH 기능보다 설정과 관리가 쉬우며, 데이터 조인, 보안 이벤트 상관 분석, 자산 정보 병합 등에 유용
- JOIN을 위해 새롭게 설계된 단일 샤드 기반의 ‘lookup index’ 모드 도입 — 최대 20억 문서까지 저장 가능
-
LOOKUP 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) 병합
- 보안 이벤트에 직원 정보, 자산 정보, 위협 인텔리전스 등 추가
- 웹 로그에서 응답 코드별 환경 분석 등
기존 ENRICH와의 차이점
-
ENRICH 방식
- 인덱스 기반의 정책을 사전에 설정해야 함
- 데이터가 변경될 때마다 정책을 재실행해야 함
-
다중 매칭 시 멀티값 필드로 반환되어 후처리가 복잡함
-
집계 및 통계 분석에는 부적합
- **정적인 데이터(변경이 거의 없는 참조용 정보)**에 적합
-
LOOKUP JOIN 방식
-
별도 정책 없이 즉시 사용 가능
- 인덱스를 직접 수정할 수 있어, 변경 사항이 즉시 반영됨
-
다중 매칭 시 행 단위로 분리되어 분석이 용이함
-
그룹화 및 집계에 최적화되어 있음 (예: 사용자별 트래픽 합계)
-
동적이고 자주 업데이트되는 데이터에도 유리함
사용 예시
FROM kibana_sample_data_logs
| WHERE response.keyword != "200"
| LOOKUP JOIN envs_lkp ON clientip
| STATS COUNT(*) by response, environment
Lookup 인덱스 생성 방법
주의사항 및 팁
-
JOIN은 무거운 연산이므로 자주 쓰는 필드는 lookup 대신 ENRICH + ingest-time denormalization 고려
-
lookup index는 단일 샤드로 구성되어 있으며, 최대 20억 문서 제한
- 일반 쿼리처럼 FROM <lookup_index> 로 직접 조회도 가능함
- Logstash나 Elastic Agent를 통해도 데이터 입력 가능 (단, data stream은 아님)
향후 계획
-
INNER JOIN, SUBQUERY, 일반 인덱스 조인도 지원 예정
- Kibana 내에서 직접 lookup 인덱스 생성 및 수정 UI 제공 예정
- 예: Discover에서 CSV 드래그 앤 드롭 → 자동 인덱스 생성
-
GUI 기반 Lookup 관리 기능 제공 예정 (목업도 공개됨)
정리 및 시작하기
-
LOOKUP JOIN은 정식 릴리즈 전 기술 프리뷰지만, ES|QL을 새로운 수준으로 끌어올릴 수 있는 기능
- Elastic Cloud에서 Elasticsearch 8.18 또는 9.0으로 시작 가능