serial
순서가 중요한 명령어를 실행할 수 있도록 입력을 튜플 단위로 직렬화하여 서브쿼리를 실행하고, 결과를 다시 하나의 전송 단위로 묶어서 전달합니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 가공 쿼리 |
| 필요 권한 | 없음 |
| 라이선스 사용량 | 해당 없음 |
| 병렬 실행 | 지원 |
| 분산 실행 | 미지원 |
문법
대상
[ SUBQUERY ]- 각 입력 레코드에 대해 실행할 서브쿼리. 대괄호(
[,])로 감싸서 지정합니다. 서브쿼리에는 스트림 처리가 가능한 명령어만 사용할 수 있습니다.
입력 필드
없음
출력 필드
없음 (서브쿼리 처리 결과를 변경 없이 전달)
오류 코드
파싱 오류
| 오류 코드 | 메시지 | 설명 |
|---|---|---|
| 90204 | '['가 짝이 맞지 않습니다. | 대괄호가 짝이 맞지 않는 경우 |
| 90206 | 서브 쿼리가 없습니다. | 대괄호가 없거나 서브쿼리가 비어 있는 경우 |
| 22501 | serial 명령어의 서브쿼리에 사용할 수 없는 명령어 ([cmd])가 있습니다. | 서브쿼리에 스트림 처리를 지원하지 않는 명령어가 포함된 경우 |
런타임 오류
해당 사항 없음
설명
serial 명령어는 병렬 처리 환경에서 레코드 순서가 보장되어야 하는 서브쿼리를 실행할 때 사용합니다. 일반적으로 쿼리 파이프라인은 성능 향상을 위해 배치(batch) 단위로 레코드를 전송하지만, prev와 같이 레코드 순서에 의존하는 명령어는 배치 단위로 처리하면 의도한 대로 동작하지 않을 수 있습니다.
serial 명령어는 각 입력 레코드를 튜플 단위로 직렬화하여 서브쿼리에 전달한 후, 서브쿼리의 결과를 다시 하나의 전송 단위로 묶어서 다음 명령어로 전달합니다. 이를 통해 서브쿼리 내부에서는 레코드가 하나씩 순서대로 처리됩니다.
서브쿼리에는 스트림 처리가 가능한 명령어만 사용할 수 있습니다. sort, stats 등 모든 입력을 수집한 후 처리하는 명령어는 서브쿼리에 사용할 수 없습니다.
사용 예
이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.
-
이전 레코드와의 전송량 차이를 순서 보장하여 계산
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_diffserial명령어로 레코드를 하나씩 직렬화하여prev명령어에 전달하므로, 이전 레코드의bytes값을 정확하게 참조할 수 있습니다. -
여러 스트림 처리 명령어를 서브쿼리로 조합
table WEB_APACHE_SAMPLE | serial [ search status >= 400 | eval label = concat(method, " ", uri, " -> ", status) ] | fields _time, src_ip, label각 레코드에 대해
search와eval을 순서대로 실행하여 오류 요청에 레이블을 생성합니다.
호환성
serial 명령어는 소나 4.0 이전 버전부터 제공되었습니다.