parallel

서브쿼리를 스레드 풀로 병렬 실행하여 입력 데이터를 처리합니다. 입력 레코드를 여러 스레드에 분배하여 서브쿼리를 동시에 실행하고, 각 스레드의 결과를 하나로 합쳐서 다음 명령어로 전달합니다.

명령어 속성

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

문법

parallel [core=INT] [ SUBQUERY ]

옵션

core=INT
병렬 처리에 사용할 스레드 수 (기본값: CPU 코어 수). 시스템의 CPU 코어 수를 초과할 수 없습니다.

대상

SUBQUERY
입력 레코드를 처리할 서브쿼리. 대괄호([ ])로 감싸서 지정합니다. 서브쿼리에는 스트림 처리가 가능한 명령어만 사용할 수 있습니다. 정렬이나 집계처럼 모든 입력을 수집한 뒤 처리하는 명령어는 사용할 수 없습니다.

입력 필드

없음

출력 필드

없음 (입력 레코드를 변경 없이 전달)

오류 코드

파싱 오류
오류 코드메시지설명
22400parallel 명령어의 core 옵션 값이 너무 큽니다. (최댓값: [max])core 옵션 값이 시스템 CPU 코어 수를 초과한 경우
22401parallel 명령어는 중첩해서 사용할 수 없습니다.parallel 명령어의 서브쿼리 안에서 다시 parallel을 사용한 경우
22402parallel 명령어의 서브쿼리에 사용할 수 없는 명령어 ([cmd])가 있습니다.서브쿼리에 스트림 처리를 지원하지 않는 명령어가 포함된 경우
90204'['가 짝이 맞지 않습니다.서브쿼리의 대괄호가 올바르게 짝지어지지 않은 경우
90206서브 쿼리가 없습니다.서브쿼리가 지정되지 않은 경우
런타임 오류

해당 사항 없음

설명

parallel 명령어는 입력 레코드를 여러 묶음으로 나누어 스레드 풀의 각 스레드에 분배합니다. 각 스레드는 독립된 서브쿼리 파이프라인을 실행하여 할당받은 레코드를 처리하고, 처리 결과를 다시 하나로 합쳐서 다음 명령어로 전달합니다.

서브쿼리에는 eval, rex, parse, search 등 스트림 처리가 가능한 명령어만 사용할 수 있습니다. sort, stats 등 모든 입력을 수집해야 하는 명령어는 사용할 수 없습니다.

기본적으로 시스템의 CPU 코어 수만큼 스레드를 생성합니다. core 옵션으로 스레드 수를 줄일 수 있지만 코어 수를 초과할 수는 없습니다. 스레드 풀이 모두 사용 중이면 호출 스레드에서 직접 실행합니다.

입력 레코드의 순서는 보장되지 않을 수 있습니다. 각 묶음은 최소 50개의 레코드 단위로 분배됩니다. 또한 parallel 명령어는 중첩해서 사용할 수 없습니다.

사용 예

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

  1. 서브쿼리를 병렬로 실행

    table WEB_APACHE_SAMPLE
    | parallel [ eval uri_len = len(uri) ]
    

    WEB_APACHE_SAMPLE 테이블의 레코드를 병렬로 처리하여 uri 필드의 길이를 계산합니다.

  2. 스레드 수를 지정하여 병렬 실행

    table WEB_APACHE_SAMPLE
    | parallel core=4 [ eval agent_len = len(agent) | eval is_mobile = agent == "*Mobile*" ]
    

    4개의 스레드를 사용하여 agent 필드의 길이를 계산하고 모바일 여부를 판별하는 작업을 병렬로 처리합니다.

  3. 여러 가공 명령어를 서브쿼리로 병렬 실행

    table WEB_APACHE_SAMPLE
    | parallel [ eval line_lower = lower(line) | search line_lower == "*error*" ]
    

    line 필드를 소문자로 변환한 뒤 error 문자열이 포함된 레코드만 필터링하는 작업을 병렬로 처리합니다.

호환성

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