outputjson
지정한 파일 시스템 경로에 입력 레코드의 필드 값을 JSON 형식의 텍스트로 기록합니다. 각 레코드는 한 줄의 JSON 리터럴로 기록되며 개행으로 구분됩니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 가공 쿼리 |
| 필요 권한 | 클러스터 관리자 |
| 라이선스 사용량 | 해당 없음 |
| 병렬 실행 | 미지원 |
| 분산 실행 | 분석 노드에서 실행 (reducer) |
문법
옵션
overwrite=BOOLt로 설정하면 대상 파일이 이미 존재하더라도 덮어씁니다. 미설정 시 파일이 존재하면 쿼리가 실패합니다.append옵션과 동시에 사용할 수 없습니다. (기본값:f)append=BOOLt로 설정하면 대상 파일이 이미 존재할 때 파일 끝에 이어서 기록합니다.overwrite옵션과 동시에 사용할 수 없습니다. (기본값:f)encoding=STR- 출력 파일의 문자 인코딩을 지정합니다. (기본값:
utf-8) partition=BOOLt로 설정하면 파일 경로에 시간 기반 매크로를 사용하여 파티션별로 파일을 분리하여 기록합니다. 로그 시각 기준의logtime매크로와 현재 시각 기준의now매크로를 사용할 수 있습니다. (기본값:f)tmp=STR- 임시 파일 경로를 지정합니다. 설정 시 해당 경로에 임시로 기록한 후 쿼리가 종료되면 최종 파일 경로로 이동합니다.
flush=INT{s|m|h|d}- 주기적으로 버퍼를 플러시하는 간격을 지정합니다. 예를 들어
flush=10s는 10초마다 버퍼를 플러시합니다.
대상
FILE_PATH- JSON 파일을 기록할 파일 시스템 경로.
partition=t옵션과 함께 사용할 때는{logtime:yyyy},{logtime:MM},{logtime:dd},{now:yyyy}등의 시간 매크로를 경로에 포함할 수 있습니다. [FIELD, ...]- JSON 파일에 기록할 필드 이름. 쉼표(
,)로 구분하여 여러 필드를 지정합니다. 필드를 지정하지 않으면 레코드의 모든 필드를 기록합니다.
입력 필드
없음
출력 필드
없음 (입력 레코드를 변경 없이 전달)
오류 코드
파싱 오류
| 오류 코드 | 메시지 | 설명 |
|---|---|---|
| 30300 | outputjson 명령어 쿼리가 잘못되었습니다. | 명령어 문자열이 쉼표로 끝나는 경우 |
| 30301 | outputjson 명령어로 내보낼 파일 경로에 매크로를 사용할 경우 파티션(partition) 옵션이 필요합니다. | 파일 경로에 시간 매크로가 포함되어 있으나 partition=t가 없는 경우 |
| 30302 | outputjson 커맨드로 내보낼 필드명을 입력하십시오. | 출력 필드명이 지정되지 않은 경우 |
| 30304 | outputjson 명령어의 overwrite와 append 옵션은 동시에 사용할 수 없습니다. | overwrite=t와 append=t를 동시에 지정한 경우 |
| 30305 | outputjson 명령어로 내보낼 임시 파일 경로 tmp_path로의 접근이 거부되었습니다. | 임시 파일 경로에 대한 접근 권한이 없는 경우 |
| 30306 | outputjson 명령어로 내보낼 파일 경로 file_path로의 접근이 거부되었습니다. | JSON 파일 경로에 대한 접근 권한이 없는 경우 |
런타임 오류
| 오류 코드 | 메시지 | 설명 | 후처리 동작 |
|---|---|---|---|
| 30303 | outputjson 명령어를 실행하는 중 IO 오류가 발생했습니다: [msg]. | 파일 쓰기 중 입출력 오류가 발생한 경우 | 파일 핸들을 닫고 쿼리를 취소함 |
| 30306 | outputjson 명령어로 내보낼 파일 경로 file_path로의 접근이 거부되었습니다. | 파티션 모드에서 해석된 파일 경로에 접근할 수 없는 경우 | 쿼리를 취소함 |
설명
outputjson 명령어는 입력으로 받은 레코드를 JSON 형식으로 파일에 기록합니다. 각 레코드는 한 줄의 JSON 객체로 기록되며 개행 문자로 구분됩니다. 필드를 지정하면 해당 필드만 기록하고, 필드를 생략하면 레코드의 모든 필드를 기록합니다. 기록이 완료된 레코드는 다음 명령어로 그대로 전달됩니다.
partition=t 옵션을 사용하면 각 레코드의 _time 필드 값(로그 시각)을 기준으로 파일 경로의 시간 매크로를 해석하여 파티션별로 별도의 파일에 기록합니다.
tmp 옵션을 사용하면 쿼리 실행 중에는 임시 파일 경로에 기록하고, 쿼리가 정상 종료되면 최종 경로로 파일을 이동합니다. 쿼리가 취소된 경우 append 모드가 아니면 임시 파일 또는 출력 파일을 삭제합니다.
분산 환경에서는 분석 노드에서 파일 쓰기를 수행합니다.
이 명령어는 4.0.2511.0 버전부터 클러스터 관리자 권한이 필요하며, 접근 가능한 파일 경로가 제한됩니다. 자세한 내용은 파일 접근 제한을 참고하세요.
사용 예
이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.
각 사용 예의 파일 경로는 ALLOWED_FILE_SCAN_PATHS 설정에 포함되어 있다고 가정합니다.
-
JSON 파일로 기록
table limit=100 WEB_APACHE_SAMPLE | outputjson /opt/logpresso/output/access.json src_ip, method, uri, status, bytessrc_ip,method,uri,status,bytes필드를/opt/logpresso/output/access.json파일에 JSON 형식으로 기록합니다. -
모든 필드를 JSON 파일로 기록
table limit=100 WEB_APACHE_SAMPLE | outputjson /opt/logpresso/output/access_all.json필드를 지정하지 않으면 레코드의 모든 필드를 기록합니다.
-
기존 파일 덮어쓰기
table limit=100 WEB_APACHE_SAMPLE | outputjson overwrite=t /opt/logpresso/output/access.json src_ip, method, status대상 파일이 이미 존재하더라도 덮어씁니다.
-
파티션별 파일 분리
table WEB_APACHE_SAMPLE | outputjson partition=t /opt/logpresso/output/{logtime:yyyy}/{logtime:MM}/{logtime:dd}/access.json src_ip, method, status로그 시각을 기준으로 연/월/일 디렉터리를 생성하여 파티션별로 JSON 파일을 기록합니다.
-
기존 파일에 이어서 기록
table limit=100 WEB_APACHE_SAMPLE | outputjson append=t /opt/logpresso/output/access.json src_ip, method, status기존 파일 끝에 레코드를 이어서 기록합니다.
-
임시 파일을 사용하여 기록
table WEB_APACHE_SAMPLE | outputjson tmp=/opt/logpresso/output/access.tmp /opt/logpresso/output/access.json src_ip, method, uri, status, bytes쿼리 실행 중에는 임시 파일에 기록하고, 쿼리가 정상 종료되면 최종 경로로 파일을 이동합니다.
호환성
outputjson 명령어는 소나 4.0 이전 버전부터 제공되었습니다. 4.0.2511.0 버전부터 클러스터 관리자 권한이 필요합니다.