dbquery

외부 데이터베이스 서버를 대상으로 JDBC를 통해 SQL 질의를 수행합니다. JDBC 프로파일은 사전에 구성되어 있어야 합니다.

명령어 속성

항목설명
명령어 유형드라이버 쿼리
필요 권한JDBC 프로파일 사용 권한
라이선스 사용량집계함
병렬 실행미지원
분산 실행미지원

문법

dbquery PROFILE SQL

대상

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 프로파일을 지정한 경우
12001JDBC 프로파일 사용 권한이 없습니다.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로 변경할 수 있습니다.

사용 예

  1. 외부 데이터베이스에서 데이터 조회

    dbquery mydb SELECT * FROM employees WHERE department = 'sales'
    

    mydb 프로파일로 연결한 데이터베이스에서 employees 테이블의 sales 부서 레코드를 조회합니다.

  2. 플레이스홀더를 사용한 동적 질의

    set start_date = string(dateadd(now(), "day", -7), "yyyy-MM-dd")
    | dbquery mydb SELECT * FROM access_logs WHERE log_date >= :start_date
    

    set 명령어로 설정한 start_date 매개변수를 SQL 질의에 삽입하여 최근 7일간의 로그를 조회합니다.

  3. 조회 결과를 가공하여 정렬

    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 이전 버전부터 제공되었습니다.