groovy
사용자 정의 그루비 스크립트를 실행하여 입력 레코드를 가공합니다. 서버에 미리 배포한 그루비 스크립트를 이름으로 지정하면, 각 레코드에 대해 스크립트의 onRow() 메서드가 호출됩니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 가공 쿼리 |
| 필요 권한 | 없음 |
| 라이선스 사용량 | 해당 없음 |
| 병렬 실행 | 지원 |
| 분산 실행 | 수집 노드에서 실행 (mapper) |
문법
groovy SCRIPT_NAME
대상
SCRIPT_NAME- 실행할 그루비 스크립트의 이름.
query_scripts/디렉터리에 저장된SCRIPT_NAME.groovy파일을 로드합니다. 스크립트는GroovyQueryScript추상 클래스를 상속하여onRow()메서드를 구현해야 합니다.
입력 필드
없음
출력 필드
없음 (스크립트 로직에 따라 동적으로 결정)
오류 코드
파싱 오류
| 오류 코드 | 메시지 | 설명 |
|---|---|---|
| groovy-script-failure | (동적 메시지) | 스크립트를 로드하거나 인스턴스화하는 과정에서 오류가 발생한 경우. 스크립트 파일이 없거나 컴파일 오류가 있을 때 발생합니다. |
런타임 오류
해당 사항 없음
설명
groovy 명령어는 query_scripts/ 디렉터리에 배포된 그루비 스크립트를 로드하여 실행합니다. 스크립트는 GroovyQueryScript 추상 클래스를 상속해야 하며, 입력 레코드를 처리하려면 onRow(Row row) 메서드를 오버라이드합니다. 처리한 레코드를 다음 명령어로 전달하려면 pipe.onRow(row)를 호출합니다.
스크립트가 ThreadSafe 인터페이스를 구현하면 동기화 없이 병렬로 실행됩니다. 그렇지 않으면 synchronized 블록으로 직렬화하여 실행합니다.
스크립트의 생명주기 메서드는 다음과 같습니다:
onStart(): 쿼리 시작 시 한 번 호출됩니다.onRow(Row row): 입력 레코드마다 호출됩니다.onRowBatch(RowBatch rowBatch): 레코드 배치 단위로 호출됩니다. 기본 구현은 배치의 각 레코드에 대해onRow()를 호출합니다.onClose(): 쿼리 종료 시 한 번 호출됩니다.
사용 예
이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.
-
그루비 스크립트 실행
table WEB_APACHE_SAMPLE | groovy my_transformquery_scripts/my_transform.groovy스크립트를 로드하여 각 레코드를 처리합니다. -
그루비 스크립트 예시
아래는
query_scripts/add_uri_len.groovy파일의 예시입니다.uri필드의 길이를 계산하여uri_len필드에 할당합니다.import org.araqne.logdb.groovy.GroovyQueryScript import org.araqne.logdb.Row class AddUriLen extends GroovyQueryScript { void onRow(Row row) { def uri = row.get("uri") if (uri != null) row.put("uri_len", uri.toString().length()) pipe.onRow(row) } }이 스크립트를 배포한 후 다음과 같이 실행합니다.
table WEB_APACHE_SAMPLE | groovy add_uri_len | fields uri, uri_len | limit 5각 레코드에
uri_len필드가 추가됩니다.
호환성
groovy 명령어는 소나 4.0 이전 버전부터 제공되었습니다.