streamjoin

입력 데이터와 서브 쿼리 결과를 해시 조인으로 병합합니다. 서브 쿼리 결과를 오프힙 메모리에 적재하므로 join 명령어보다 속도가 빠르며, 스트림 쿼리에서도 사용할 수 있습니다.

명령어 속성

항목설명
명령어 유형가공 쿼리
필요 권한없음
라이선스 사용량해당 없음
병렬 실행지원
분산 실행수집 노드에서 실행 (mapper)

문법

streamjoin [type={inner|left|leftonly}] [timeout=INT{s|m|h|d|mon}] FIELD, ... [ SUBQUERY ]

옵션

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 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.

  1. 내부 조인 — 웹 로그에 호스트명 정보 병합

    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와 일치하는 레코드만 출력됩니다.

  2. 왼쪽 조인 — 매칭 여부와 무관하게 전체 웹 로그 유지

    table WEB_APACHE_SAMPLE
    | streamjoin type=left src_ip [
        json "[{'src_ip': '192.0.2.1', 'hostname': 'web-01'}]"
      ]
    

    왼쪽(웹 로그) 레코드를 모두 출력하고, 일치하는 오른쪽 필드를 병합합니다. 서브 쿼리에 일치하는 IP가 없는 레코드도 출력되지만 hostname 필드가 없습니다.

  3. 왼쪽 전용 조인 — 허용 목록에 없는 IP 탐지

    table WEB_APACHE_SAMPLE
    | streamjoin type=leftonly src_ip [
        json "[{'src_ip': '192.0.2.1'}, {'src_ip': '192.0.2.2'}]"
      ]
    

    허용 목록에 없는 IP의 웹 로그만 출력합니다.

  4. 서브 쿼리 타임아웃 지정

    table WEB_APACHE_SAMPLE
    | streamjoin timeout=30s src_ip [
        table sonar_assets
        | fields src_ip, hostname
      ]
    

    서브 쿼리가 30초 내에 완료되지 않으면 강제 종료합니다. 타임아웃이 발생하면 _streamjoin_fail 필드에 예외 메시지가 추가됩니다.

  5. 여러 조인 키 사용

    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_ipstatus 두 필드를 조인 키로 사용하여 지역 정보를 병합합니다.

호환성

streamjoin 명령어는 소나 4.0 이전 버전부터 제공되었습니다.