streamjoin
입력 데이터와 서브 쿼리 결과를 해시 조인으로 병합합니다. 서브 쿼리 결과를 오프힙 메모리에 적재하므로 join 명령어보다 속도가 빠르며, 스트림 쿼리에서도 사용할 수 있습니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 가공 쿼리 |
| 필요 권한 | 없음 |
| 라이선스 사용량 | 해당 없음 |
| 병렬 실행 | 지원 |
| 분산 실행 | 수집 노드에서 실행 (mapper) |
문법
옵션
type={inner|left|leftonly}- 조인 유형 (기본값:
inner).
inner: 양쪽 모두 조인 키가 일치하는 레코드만 출력left: 왼쪽(입력) 레코드를 모두 출력하고, 조인 키가 일치하면 오른쪽(서브 쿼리) 필드를 병합leftonly: 오른쪽에 일치하는 키가 없는 왼쪽 레코드만 출력
timeout=INT{s|m|h|d|mon}- 서브 쿼리 타임아웃.
s(초),m(분),h(시),d(일),mon(월) 단위로 지정할 수 있습니다. 지정한 시간 내에 서브 쿼리가 완료되지 않으면 강제 종료합니다.
대상
FIELD, ...- 조인 키 필드. 쉼표(
,)로 구분하여 여러 필드를 지정할 수 있습니다. [ SUBQUERY ]- 대괄호(
[])로 감싼 서브 쿼리. 서브 쿼리 결과가 오른쪽 데이터셋으로 사용됩니다.
입력 필드
없음 (조인 키 필드를 입력 레코드에서 읽지만 특정 필드명을 강제하지 않음)
출력 필드
없음 (입력 데이터에 따라 동적으로 결정)
_streamjoin_fail- 서브 쿼리가 실패한 경우에만 출력됩니다. 예외 메시지를 문자열로 포함합니다.
오류 코드
파싱 오류
| 오류 코드 | 메시지 | 설명 |
|---|---|---|
| 23200 | 지원되지 않는 스트림 조인 방식입니다. inner, left, leftonly 중 하나를 사용하세요. | 지원되지 않는 조인 유형을 지정한 경우 |
| 23201 | 스트림 조인 키를 지정하세요. | 조인 키 필드가 지정되지 않은 경우 |
| 90204 | [가 짝이 맞지 않습니다. | 서브 쿼리의 대괄호가 짝이 맞지 않는 경우 |
| 90206 | 서브 쿼리가 없습니다. | 서브 쿼리가 지정되지 않은 경우 |
런타임 오류
해당 사항 없음
설명
streamjoin 명령어는 서브 쿼리를 먼저 실행하고, 서브 쿼리 결과를 오프힙 메모리에 적재한 후 해시 조인을 수행합니다. join 명령어와 달리 서브 쿼리 결과를 메모리에 유지하므로 스트림 쿼리에서도 사용할 수 있습니다.
메모리 풀 크기에 따라 조인할 수 있는 데이터 양에 제한이 있습니다. 기본 메모리 풀 크기는 500MB이며, logpresso.streamjoin.max_buffer_size 시스템 속성으로 변경할 수 있습니다.
서브 쿼리가 실패하면 입력 레코드에 _streamjoin_fail 필드로 예외 메시지를 추가합니다. timeout 옵션을 지정한 경우 서브 쿼리가 제한 시간 내에 완료되지 않으면 강제 종료합니다.
사용 예
이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.
-
내부 조인 — 웹 로그에 호스트명 정보 병합
table WEB_APACHE_SAMPLE | streamjoin src_ip [ json "[{'src_ip': '192.0.2.1', 'hostname': 'web-01'}, {'src_ip': '192.0.2.2', 'hostname': 'web-02'}]" ]WEB_APACHE_SAMPLE테이블의 웹 로그를src_ip기준으로 내부 조인하여 호스트명 정보를 병합합니다. 서브 쿼리의 IP와 일치하는 레코드만 출력됩니다. -
왼쪽 조인 — 매칭 여부와 무관하게 전체 웹 로그 유지
table WEB_APACHE_SAMPLE | streamjoin type=left src_ip [ json "[{'src_ip': '192.0.2.1', 'hostname': 'web-01'}]" ]왼쪽(웹 로그) 레코드를 모두 출력하고, 일치하는 오른쪽 필드를 병합합니다. 서브 쿼리에 일치하는 IP가 없는 레코드도 출력되지만
hostname필드가 없습니다. -
왼쪽 전용 조인 — 허용 목록에 없는 IP 탐지
table WEB_APACHE_SAMPLE | streamjoin type=leftonly src_ip [ json "[{'src_ip': '192.0.2.1'}, {'src_ip': '192.0.2.2'}]" ]허용 목록에 없는 IP의 웹 로그만 출력합니다.
-
서브 쿼리 타임아웃 지정
table WEB_APACHE_SAMPLE | streamjoin timeout=30s src_ip [ table sonar_assets | fields src_ip, hostname ]서브 쿼리가 30초 내에 완료되지 않으면 강제 종료합니다. 타임아웃이 발생하면
_streamjoin_fail필드에 예외 메시지가 추가됩니다. -
여러 조인 키 사용
table WEB_APACHE_SAMPLE | streamjoin src_ip, status [ json "[{'src_ip': '192.0.2.1', 'status': 200, 'region': 'kr'}, {'src_ip': '192.0.2.2', 'status': 404, 'region': 'us'}]" ]src_ip와status두 필드를 조인 키로 사용하여 지역 정보를 병합합니다.
호환성
streamjoin 명령어는 소나 4.0 이전 버전부터 제공되었습니다.