join

서브 쿼리 결과를 조인 키 기준으로 병합합니다.

명령어 속성

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

문법

join [type={inner|left|leftonly|right|rightonly|cross|full}] FIELD, ... [ SUBQUERY ]

옵션

type={inner|left|leftonly|right|rightonly|cross|full}
조인 유형 (기본값: inner)
  • inner: 양쪽 모두 조인 키가 일치하는 레코드만 출력
  • left: 왼쪽(입력) 레코드를 모두 출력하고, 조인 키가 일치하면 오른쪽(서브 쿼리) 필드를 병합
  • leftonly: 오른쪽에 일치하는 키가 없는 왼쪽 레코드만 출력
  • right: 오른쪽(서브 쿼리) 레코드를 모두 출력하고, 조인 키가 일치하면 왼쪽(입력) 필드를 병합
  • rightonly: 왼쪽에 일치하는 키가 없는 오른쪽 레코드만 출력
  • cross: 양쪽 레코드의 카르테시안 곱을 출력. 조인 키를 지정하지 않음
  • full: 양쪽 레코드를 모두 출력하고, 조인 키가 일치하면 필드를 병합

대상

FIELD, ...
조인 키 필드. 쉼표(,)로 구분하여 여러 필드를 지정할 수 있습니다. cross 조인에서는 지정하지 않습니다.
[ SUBQUERY ]
대괄호([])로 감싼 서브 쿼리. 서브 쿼리 결과가 오른쪽 데이터셋으로 사용됩니다.

입력 필드

없음 (조인 키 필드를 입력 레코드에서 읽지만 특정 필드명을 강제하지 않음)

출력 필드

없음 (입력 데이터에 따라 동적으로 결정)

오류 코드

파싱 오류
오류 코드메시지설명
20500지원되지 않는 조인 방식입니다. inner, left, leftonly, right, rightonly, cross, full 중 하나를 사용하세요.지원되지 않는 조인 유형을 지정한 경우
20501조인 키를 지정하세요.조인 키 필드가 지정되지 않은 경우
런타임 오류

해당 사항 없음

설명

join 명령어는 입력 레코드(왼쪽)와 서브 쿼리 결과(오른쪽)를 조인 키 기준으로 병합합니다. 서브 쿼리가 먼저 실행되고, 서브 쿼리 결과 건수가 100,000건 이하이면 해시 조인, 초과하면 소트-머지 조인을 사용합니다.

조인 키 필드 앞에 + 또는 - 기호를 붙이면 소트-머지 조인을 강제하고, 해당 필드의 정렬 순서를 지정합니다.

스트림 쿼리에서는 join 명령어를 사용할 수 없으므로 streamjoin 명령어를 사용해야 합니다.

분산 환경에서는 분석 노드에서 조인을 수행합니다.

해시 조인 임계값 기본값은 100,000건이며, 시스템 프로퍼티 araqne.hashjointhreshold로 변경할 수 있습니다.

사용 예

이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.

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

    table WEB_APACHE_SAMPLE
    | stats count by src_ip
    | join src_ip [
        json "[{'src_ip': '192.0.2.1', 'hostname': 'web-01'}, {'src_ip': '192.0.2.2', 'hostname': 'web-02'}]"
      ]
    

    WEB_APACHE_SAMPLE 테이블에서 IP별 요청 건수를 집계하고, src_ip 필드를 기준으로 내부 조인하여 호스트명 정보를 병합합니다. 서브 쿼리의 IP와 일치하는 레코드만 출력됩니다.

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

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

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

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

    table WEB_APACHE_SAMPLE
    | stats count by src_ip
    | join type=leftonly src_ip [
        json "[{'src_ip': '192.0.2.1'}, {'src_ip': '192.0.2.2'}]"
      ]
    

    허용 목록(json 인라인 데이터)에 없는 IP의 웹 로그 집계 결과만 출력합니다.

  4. 크로스 조인

    json "[{'method': 'GET'}, {'method': 'POST'}]"
    | join type=cross [
        json "[{'status': 200}, {'status': 404}]"
      ]
    

    양쪽 레코드의 모든 조합을 출력합니다. 총 4건의 레코드가 출력됩니다.

  5. 여러 조인 키 사용

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

호환성

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