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