serial

순서가 중요한 명령어를 실행할 수 있도록 입력을 튜플 단위로 직렬화하여 서브쿼리를 실행하고, 결과를 다시 하나의 전송 단위로 묶어서 전달합니다.

명령어 속성

항목설명
명령어 유형가공 쿼리
필요 권한없음
라이선스 사용량해당 없음
병렬 실행지원
분산 실행미지원

문법

serial [ SUBQUERY ]

대상

[ SUBQUERY ]
각 입력 레코드에 대해 실행할 서브쿼리. 대괄호([, ])로 감싸서 지정합니다. 서브쿼리에는 스트림 처리가 가능한 명령어만 사용할 수 있습니다.

입력 필드

없음

출력 필드

없음 (서브쿼리 처리 결과를 변경 없이 전달)

오류 코드

파싱 오류
오류 코드메시지설명
90204'['가 짝이 맞지 않습니다.대괄호가 짝이 맞지 않는 경우
90206서브 쿼리가 없습니다.대괄호가 없거나 서브쿼리가 비어 있는 경우
22501serial 명령어의 서브쿼리에 사용할 수 없는 명령어 ([cmd])가 있습니다.서브쿼리에 스트림 처리를 지원하지 않는 명령어가 포함된 경우
런타임 오류

해당 사항 없음

설명

serial 명령어는 병렬 처리 환경에서 레코드 순서가 보장되어야 하는 서브쿼리를 실행할 때 사용합니다. 일반적으로 쿼리 파이프라인은 성능 향상을 위해 배치(batch) 단위로 레코드를 전송하지만, prev와 같이 레코드 순서에 의존하는 명령어는 배치 단위로 처리하면 의도한 대로 동작하지 않을 수 있습니다.

serial 명령어는 각 입력 레코드를 튜플 단위로 직렬화하여 서브쿼리에 전달한 후, 서브쿼리의 결과를 다시 하나의 전송 단위로 묶어서 다음 명령어로 전달합니다. 이를 통해 서브쿼리 내부에서는 레코드가 하나씩 순서대로 처리됩니다.

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

사용 예

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

  1. 이전 레코드와의 전송량 차이를 순서 보장하여 계산

    table limit=10 WEB_APACHE_SAMPLE
    | sort _time
    | serial [ prev bytes | eval bytes_diff = if(isnull(prev_bytes), 0, bytes - prev_bytes) ]
    | fields _time, src_ip, bytes, prev_bytes, bytes_diff
    

    serial 명령어로 레코드를 하나씩 직렬화하여 prev 명령어에 전달하므로, 이전 레코드의 bytes 값을 정확하게 참조할 수 있습니다.

  2. 여러 스트림 처리 명령어를 서브쿼리로 조합

    table WEB_APACHE_SAMPLE
    | serial [ search status >= 400 | eval label = concat(method, " ", uri, " -> ", status) ]
    | fields _time, src_ip, label
    

    각 레코드에 대해 searcheval을 순서대로 실행하여 오류 요청에 레이블을 생성합니다.

호환성

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