insert
입력된 필드 값을 기준으로 대상 테이블을 동적으로 결정하여 레코드를 기록합니다. 클러스터 관리자 권한이 필요합니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 가공 쿼리 |
| 필요 권한 | 클러스터 관리자 |
| 라이선스 사용량 | 해당 없음 |
| 병렬 실행 | 지원 |
| 분산 실행 | 수집 노드에서 실행 (mapper) |
문법
옵션
table=STR- 대상 테이블 이름이 저장된 필드 이름. 각 레코드에서 이 필드의 값을 읽어 기록할 테이블을 결정합니다.
create=BOOLt로 설정하면 대상 테이블이 존재하지 않을 때 자동으로 테이블을 생성합니다. (기본값:f)
입력 필드
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
table 옵션 필드 | 문자열 | 필수 | 레코드를 기록할 대상 테이블 이름. null이거나 빈 문자열이면 해당 레코드를 건너뜁니다. |
_time | 날짜 | 선택 | 레코드의 시각. 값이 null이거나 날짜 타입이 아니면 현재 시각을 사용합니다. |
출력 필드
| 필드 | 타입 | 설명 |
|---|---|---|
_error | 문자열 | 오류 발생 시 오류 메시지. table does not exist (테이블 미존재) 또는 table name is invalid format (테이블 이름 형식 오류) |
오류 코드
파싱 오류
| 오류 코드 | 메시지 | 설명 |
|---|---|---|
| 30700 | 권한이 없습니다. 클러스터 관리자 권한이 필요합니다. | 클러스터 관리자 권한 없이 실행한 경우 |
| 30701 | 필드이름을 입력하십시오. | table 옵션이 지정되지 않은 경우 |
런타임 오류
해당 사항 없음
설명
insert 명령어는 각 레코드에서 table 옵션으로 지정한 필드의 값을 읽어 대상 테이블을 결정하고, 해당 테이블에 레코드를 기록합니다. 테이블 이름 필드는 저장 시 레코드에서 제거됩니다.
각 레코드의 _time 필드 값을 저장 시각으로 사용하며, _time 필드가 없거나 날짜 타입이 아닌 경우 현재 시각을 사용합니다.
import 명령어와 달리 레코드마다 다른 테이블에 기록할 수 있어, 하나의 쿼리로 여러 테이블에 데이터를 분산 저장할 수 있습니다.
create=t 옵션을 사용하면 대상 테이블이 존재하지 않을 때 자동으로 테이블을 생성합니다. create 옵션을 사용하지 않은 상태에서 대상 테이블이 존재하지 않으면 해당 레코드의 _error 필드에 table does not exist 메시지를 할당합니다.
분산 환경에서는 수집 노드에서 실행됩니다.
사용 예
이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.
-
HTTP 상태 코드에 따라 다른 테이블에 기록
table WEB_APACHE_SAMPLE | eval _target = if(status >= 400, "WEB_ERROR_LOGS", "WEB_ACCESS_LOGS") | insert table=_targetHTTP 상태 코드가 400 이상인 레코드는
WEB_ERROR_LOGS테이블에, 나머지는WEB_ACCESS_LOGS테이블에 기록합니다. 저장된 레코드에서_target필드는 제거됩니다. -
테이블 자동 생성
table limit=10 WEB_APACHE_SAMPLE | eval _target = "WEB_APACHE_NEW" | insert table=_target create=tWEB_APACHE_NEW테이블이 존재하지 않으면 자동으로 생성한 뒤 레코드를 기록합니다. -
HTTP 메서드별로 다른 테이블에 기록
table WEB_APACHE_SAMPLE | eval _target = concat("WEB_", method, "_LOGS") | insert table=_targetHTTP 메서드 값에 따라
WEB_GET_LOGS,WEB_POST_LOGS등 메서드별 테이블에 레코드를 기록합니다.
호환성
insert 명령어는 소나 4.0 이전 버전부터 제공되었습니다.