parallel
서브쿼리를 스레드 풀로 병렬 실행하여 입력 데이터를 처리합니다. 입력 레코드를 여러 스레드에 분배하여 서브쿼리를 동시에 실행하고, 각 스레드의 결과를 하나로 합쳐서 다음 명령어로 전달합니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 가공 쿼리 |
| 필요 권한 | 없음 |
| 라이선스 사용량 | 해당 없음 |
| 병렬 실행 | 지원 |
| 분산 실행 | 수집 노드에서 실행 (mapper) |
문법
옵션
core=INT- 병렬 처리에 사용할 스레드 수 (기본값: CPU 코어 수). 시스템의 CPU 코어 수를 초과할 수 없습니다.
대상
SUBQUERY- 입력 레코드를 처리할 서브쿼리. 대괄호(
[ ])로 감싸서 지정합니다. 서브쿼리에는 스트림 처리가 가능한 명령어만 사용할 수 있습니다. 정렬이나 집계처럼 모든 입력을 수집한 뒤 처리하는 명령어는 사용할 수 없습니다.
입력 필드
없음
출력 필드
없음 (입력 레코드를 변경 없이 전달)
오류 코드
파싱 오류
| 오류 코드 | 메시지 | 설명 |
|---|---|---|
| 22400 | parallel 명령어의 core 옵션 값이 너무 큽니다. (최댓값: [max]) | core 옵션 값이 시스템 CPU 코어 수를 초과한 경우 |
| 22401 | parallel 명령어는 중첩해서 사용할 수 없습니다. | parallel 명령어의 서브쿼리 안에서 다시 parallel을 사용한 경우 |
| 22402 | parallel 명령어의 서브쿼리에 사용할 수 없는 명령어 ([cmd])가 있습니다. | 서브쿼리에 스트림 처리를 지원하지 않는 명령어가 포함된 경우 |
| 90204 | '['가 짝이 맞지 않습니다. | 서브쿼리의 대괄호가 올바르게 짝지어지지 않은 경우 |
| 90206 | 서브 쿼리가 없습니다. | 서브쿼리가 지정되지 않은 경우 |
런타임 오류
해당 사항 없음
설명
parallel 명령어는 입력 레코드를 여러 묶음으로 나누어 스레드 풀의 각 스레드에 분배합니다. 각 스레드는 독립된 서브쿼리 파이프라인을 실행하여 할당받은 레코드를 처리하고, 처리 결과를 다시 하나로 합쳐서 다음 명령어로 전달합니다.
서브쿼리에는 eval, rex, parse, search 등 스트림 처리가 가능한 명령어만 사용할 수 있습니다. sort, stats 등 모든 입력을 수집해야 하는 명령어는 사용할 수 없습니다.
기본적으로 시스템의 CPU 코어 수만큼 스레드를 생성합니다. core 옵션으로 스레드 수를 줄일 수 있지만 코어 수를 초과할 수는 없습니다. 스레드 풀이 모두 사용 중이면 호출 스레드에서 직접 실행합니다.
입력 레코드의 순서는 보장되지 않을 수 있습니다. 각 묶음은 최소 50개의 레코드 단위로 분배됩니다. 또한 parallel 명령어는 중첩해서 사용할 수 없습니다.
사용 예
이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.
-
서브쿼리를 병렬로 실행
table WEB_APACHE_SAMPLE | parallel [ eval uri_len = len(uri) ]WEB_APACHE_SAMPLE테이블의 레코드를 병렬로 처리하여uri필드의 길이를 계산합니다. -
스레드 수를 지정하여 병렬 실행
table WEB_APACHE_SAMPLE | parallel core=4 [ eval agent_len = len(agent) | eval is_mobile = agent == "*Mobile*" ]4개의 스레드를 사용하여
agent필드의 길이를 계산하고 모바일 여부를 판별하는 작업을 병렬로 처리합니다. -
여러 가공 명령어를 서브쿼리로 병렬 실행
table WEB_APACHE_SAMPLE | parallel [ eval line_lower = lower(line) | search line_lower == "*error*" ]line필드를 소문자로 변환한 뒤error문자열이 포함된 레코드만 필터링하는 작업을 병렬로 처리합니다.
호환성
parallel 명령어는 소나 4.0 이전 버전부터 제공되었습니다.