ElasticSearch에 드디어 SQL 스타일 JOIN 기능 도입
(elastic.co)- 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
-
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" } }
-
머신러닝 File Upload를 통해 CSV 업로드 후 인덱스 생성 시
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으로 시작 가능