dbquery
외부 데이터베이스 서버를 대상으로 JDBC를 통해 SQL 질의를 수행합니다. JDBC 프로파일은 사전에 구성되어 있어야 합니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 드라이버 쿼리 |
| 필요 권한 | JDBC 프로파일 사용 권한 |
| 라이선스 사용량 | 집계함 |
| 병렬 실행 | 미지원 |
| 분산 실행 | 미지원 |
문법
대상
PROFILE- JDBC 접속 프로파일 이름. 접속 프로파일은 웹 콘솔에서 구성할 수 있습니다.
SQL- 실행할 SQL 문. SELECT, SHOW, EXECUTE, EXEC 문은 결과 집합을 레코드로 변환하여 출력하고, INSERT, UPDATE, DELETE 등 기타 SQL 문은 실행만 수행합니다.
SQL 문에 콜론(:)으로 시작하는 플레이스홀더를 사용할 수 있습니다. 플레이스홀더는 set 명령어로 설정한 쿼리 매개변수 값으로 대체됩니다.
- 숫자 타입: 값 그대로 삽입
- 날짜 타입:
'yyyy-MM-dd HH:mm:ss'또는'yyyy-MM-dd HH:mm:ss.SSS'형식의 문자열로 변환 - null:
null문자열로 삽입 - 기타 타입: 작은따옴표로 감싼 문자열로 변환
출력 필드
| 필드 | 타입 | 설명 |
|---|---|---|
| 컬럼 목록 | 가변 | SQL 결과 집합의 컬럼 레이블과 값을 그대로 반환합니다. 컬럼 이름과 타입은 SQL 질의에 따라 결정됩니다. |
오류 코드
파싱 오류
| 오류 코드 | 메시지 | 설명 |
|---|---|---|
| 12000 | 유효하지 않은 JDBC 프로파일 이름: [jdbc_profile] | 존재하지 않는 JDBC 프로파일을 지정한 경우 |
| 12001 | JDBC 프로파일 사용 권한이 없습니다. | JDBC 프로파일에 대한 사용 권한이 없는 경우 |
런타임 오류
해당 사항 없음
설명
dbquery 명령어는 JDBC를 통해 외부 데이터베이스에 SQL 질의를 실행하고, 결과 집합의 각 행을 레코드로 변환하여 출력합니다.
SELECT, SHOW, EXECUTE, EXEC로 시작하는 SQL 문은 결과 집합을 조회합니다. 그 외의 SQL 문(INSERT, UPDATE, DELETE, DDL 등)은 실행만 수행하며 레코드를 출력하지 않습니다.
SQL 문에 콜론으로 시작하는 플레이스홀더(예: :name)를 사용하면, set 명령어로 설정한 쿼리 매개변수 값으로 대체됩니다. 이를 통해 동적으로 SQL 질의를 구성할 수 있습니다.
MySQL 또는 MariaDB에 연결할 때는 대용량 결과 집합을 처리하기 위해 전방 전용 커서와 스트리밍 페치를 사용합니다. 그 외 데이터베이스에서는 결과 집합을 한 번에 2,000건씩 가져옵니다. 이 값은 JVM 시스템 속성 logpresso.jdbc.fetch_size로 변경할 수 있습니다.
사용 예
-
외부 데이터베이스에서 데이터 조회
dbquery mydb SELECT * FROM employees WHERE department = 'sales'mydb프로파일로 연결한 데이터베이스에서employees테이블의sales부서 레코드를 조회합니다. -
플레이스홀더를 사용한 동적 질의
set start_date = string(dateadd(now(), "day", -7), "yyyy-MM-dd") | dbquery mydb SELECT * FROM access_logs WHERE log_date >= :start_dateset명령어로 설정한start_date매개변수를 SQL 질의에 삽입하여 최근 7일간의 로그를 조회합니다. -
조회 결과를 가공하여 정렬
dbquery mydb SELECT src_ip, dst_ip, bytes FROM traffic_logs | stats sum(bytes) as total_bytes by src_ip | sort -total_bytes외부 데이터베이스에서 트래픽 로그를 조회한 후, 출발지 IP별 전송량 합계를 계산하여 내림차순으로 정렬합니다.
호환성
dbquery 명령어는 소나 4.0 이전 버전부터 제공되었습니다.