사용할 수 있는 인수가 많고 대부분이 선택 사항이므로, 대부분의 API 메서드에서는 키워드 인수를 사용하는 것이 좋습니다.여기에 문서화되지 않은 메서드는 API의 일부로 간주되지 않으며, 제거되거나 변경될 수 있습니다.
클라이언트 초기화
clickhouse_connect.driver.client 클래스는 Python 애플리케이션과 ClickHouse 데이터베이스 서버 간의 기본 인터페이스를 제공합니다. clickhouse_connect.get_client 함수를 사용해 다음 인수를 받는 Client 인스턴스를 가져오십시오:
연결 인수
HTTPS/TLS 인수
설정 인수
get_client의 settings 인수는 각 클라이언트 요청마다 추가 ClickHouse 설정을 서버에 전달하는 데 사용됩니다. 대부분의 경우 readonly=1 권한을 가진 사용자는 쿼리와 함께 전송된 설정을 변경할 수 없으므로, ClickHouse Connect는 최종 요청에서 이러한 설정을 제외하고 경고를 기록합니다. 다음 설정은 ClickHouse Connect에서 사용하는 HTTP 쿼리/세션에만 적용되며, 일반적인 ClickHouse 설정으로 문서화되어 있지 않습니다.
각 쿼리와 함께 전송할 수 있는 다른 ClickHouse 설정은 ClickHouse 문서를 참조하십시오.
클라이언트 생성 예시
- 매개변수를 지정하지 않으면 ClickHouse Connect 클라이언트는
localhost의 기본 HTTP 포트에default사용자로 비밀번호 없이 연결됩니다:
- 보안(HTTPS)을 사용하는 외부 ClickHouse 서버에 연결
- 세션 ID와 기타 사용자 지정 연결 매개변수, ClickHouse 설정을 사용해 연결합니다.
클라이언트 수명 주기와 모범 사례
핵심 원칙
- 클라이언트 재사용: 애플리케이션 시작 시 클라이언트를 한 번만 생성하고, 애플리케이션이 실행되는 동안 계속 재사용합니다
- 빈번한 생성 방지: 각 쿼리나 요청마다 새 클라이언트를 생성하지 마십시오(이렇게 하면 작업마다 수백 밀리초가 낭비됩니다)
- 적절한 정리: 종료할 때는 연결 풀 리소스를 해제할 수 있도록 항상 클라이언트를 닫으십시오
- 가능하면 공유: 단일 클라이언트는 연결 풀을 통해 많은 동시 쿼리를 처리할 수 있습니다(아래의 스레딩 참고 사항 참조)
기본 패턴
멀티스레드 애플리케이션
올바른 정리
client.close()는 클라이언트가 자체 풀 관리자(pool manager)를 소유한 경우에만(예: 사용자 지정 TLS/프록시 옵션으로 생성된 경우) 클라이언트를 정리하고 풀링된 HTTP 연결을 닫습니다. 이 점에 유의하십시오. 기본 공유 풀에서는 client.close_connections()를 사용해 소켓을 미리 정리하십시오. 그렇지 않으면 연결은 idle 만료 시점이나 프로세스 종료 시 자동으로 회수됩니다.
여러 클라이언트를 사용해야 하는 경우
- 서로 다른 서버: ClickHouse 서버 또는 클러스터마다 클라이언트를 1개씩 사용
- 서로 다른 자격 증명: 서로 다른 사용자 또는 접근 수준별로 별도의 클라이언트 사용
- 서로 다른 데이터베이스: 여러 데이터베이스에서 작업해야 하는 경우
- 격리된 세션: 임시 테이블 또는 세션별 설정을 위해 별도의 세션이 필요한 경우
- 스레드별 격리: 스레드마다 독립적인 세션이 필요한 경우(위 예시 참조)
공통 메서드 인수
parameters 및 settings 인수 중 하나 또는 둘 다를 사용합니다. 이러한 키워드 인수는 아래에서 설명합니다.
매개변수 인수
query* 및 command 메서드는 Python 표현식을 ClickHouse 값 표현식에 바인딩하는 데 사용하는 선택적 키워드 인수 parameters를 지원합니다. 바인딩은 두 가지 방식으로 사용할 수 있습니다.
서버 측 바인딩
{<name>:<datatype>} 형식의 바인딩 표현식을 감지하면 적절한 쿼리 매개변수를 추가합니다. 서버 측 바인딩의 경우 parameters 인수는 Python 딕셔너리여야 합니다.
- Python 딕셔너리, DateTime 값, 문자열 값을 사용한 서버 측 바인딩
클라이언트 측 바인딩
parameters 인수가 딕셔너리 또는 시퀀스여야 합니다. 클라이언트 측 바인딩은 매개변수 치환을 위해 Python의 “printf” 스타일 문자열 포맷팅을 사용합니다.
서버 측 바인딩과 달리 클라이언트 측 바인딩은 데이터베이스, 테이블, 컬럼 이름과 같은 데이터베이스 식별자에는 사용할 수 없습니다. Python 스타일 포맷팅은 서로 다른 문자열 타입을 구분하지 못하며, 이러한 값은 서로 다른 방식으로 포맷팅해야 하기 때문입니다(데이터베이스 식별자에는 backticks 또는 큰따옴표를 사용하고, 데이터 값에는 작은따옴표를 사용).
- Python 딕셔너리, DateTime 값, 문자열 이스케이프를 사용하는 예시
- Python 시퀀스(Tuple), Float64, IPv4Address 사용 예시
DateTime64 인수(초 미만 정밀도를 지원하는 ClickHouse 타입)를 바인딩하려면 다음 두 가지 사용자 지정 방법 중 하나를 사용해야 합니다:
- 예를 들어 Python
datetime.datetime값을 새 DT64Param 클래스로 감싸세요.- 매개변수 값으로 딕셔너리를 사용하는 경우 매개변수 이름에 문자열
_64를 추가하세요.
- 매개변수 값으로 딕셔너리를 사용하는 경우 매개변수 이름에 문자열
설정 인수
insert 및 select 메서드는 모두 포함된 SQL 문에 대해 ClickHouse 서버 사용자 설정을 전달할 수 있도록 선택적 settings 키워드 인수를 지원합니다. settings 인수는 딕셔너리여야 합니다. 각 항목은 ClickHouse 설정 이름과 해당 값으로 이루어져야 합니다. 값은 서버로 쿼리 매개변수로 전송될 때 문자열로 변환된다는 점에 유의하십시오.
클라이언트 수준 설정과 마찬가지로, ClickHouse Connect는 서버가 readonly=1로 표시한 설정을 관련 로그 메시지와 함께 모두 제외합니다. ClickHouse HTTP 인터페이스를 통한 쿼리에만 적용되는 설정은 항상 유효합니다. 이러한 설정은 get_client API에서 설명합니다.
ClickHouse 설정 사용 예시:
Client command 메서드
Client.command 메서드는 일반적으로 데이터를 반환하지 않거나, 전체 데이터셋 대신 단일 원시 값 또는 배열 값 하나를 반환하는 SQL 쿼리를 ClickHouse 서버로 전송할 때 사용합니다. 이 메서드는 다음 매개변수를 받습니다:
명령 예시
DDL 문
단일 값을 반환하는 간단한 쿼리
매개변수를 사용하는 명령
설정이 포함된 명령
Client query 메서드
Client.query 메서드는 ClickHouse 서버에서 단일 “batch” 데이터셋을 가져오는 기본 방법입니다. 이 메서드는 HTTP를 통해 네이티브 ClickHouse 포맷을 사용하여 대규모 데이터셋(최대 약 100만 행)을 효율적으로 전송합니다. 이 메서드는 다음 매개변수를 받습니다:
쿼리 예시
기본 쿼리
쿼리 결과 조회하기
클라이언트 측 매개변수를 사용한 쿼리
서버 측 매개변수를 사용하는 쿼리
설정을 지정한 쿼리
QueryResult 객체
query 메서드는 다음 공개 속성을 포함하는 QueryResult 객체를 반환합니다:
result_rows— 반환된 데이터를 행(row) 시퀀스 형태로 나타낸 행렬이며, 각 행 요소는 컬럼 값의 시퀀스입니다.result_columns— 반환된 데이터를 컬럼(column) 시퀀스 형태로 나타낸 행렬이며, 각 컬럼 요소는 해당 컬럼의 행 값 시퀀스입니다column_names—result_set의 컬럼 이름을 나타내는 문자열 튜플column_types—result_columns의 각 컬럼에 대한 ClickHouse 데이터 타입을 나타내는 ClickHouseType 인스턴스 튜플query_id— ClickHouse query_id (system.query_log테이블에서 쿼리를 확인할 때 유용함)summary—X-ClickHouse-SummaryHTTP 응답 헤더를 통해 반환되는 모든 데이터first_item— 응답의 첫 번째 행을 딕셔너리로 가져오기 위한 편의 속성입니다(키는 컬럼 이름)first_row— 결과의 첫 번째 행을 반환하는 편의 속성입니다column_block_stream— 컬럼 지향 포맷의 쿼리 결과를 생성하는 제너레이터입니다. 이 속성은 직접 참조하지 않아야 합니다(아래 참조).row_block_stream— 행 지향 포맷의 쿼리 결과를 생성하는 제너레이터입니다. 이 속성은 직접 참조하지 않아야 합니다(아래 참조).rows_stream— 호출할 때마다 단일 행을 반환하는 쿼리 결과 제너레이터입니다. 이 속성은 직접 참조하지 않아야 합니다(아래 참조).summary—command메서드에서 설명한 대로, ClickHouse가 반환하는 요약 정보 딕셔너리
*_stream 속성은 반환된 데이터의 이터레이터로 사용할 수 있는 Python Context를 반환합니다. 이러한 속성은 Client *_stream 메서드를 통해서만 간접적으로 접근해야 합니다.
스트리밍 쿼리 결과의 전체 세부 사항(StreamContext 객체 사용)은 고급 쿼리(Streaming Queries)에 설명되어 있습니다.
NumPy, Pandas 또는 Arrow로 쿼리 결과 처리하기
클라이언트 스트리밍 쿼리 메서드
클라이언트 insert 메서드
Client.insert 메서드를 사용합니다. 이 메서드는 다음 매개변수를 받습니다.
이 메서드는 “command” 메서드에 설명된 “쿼리 요약” 딕셔너리를 반환합니다. 어떤 이유로든 삽입이 실패하면 예외가 발생합니다.
Pandas DataFrame, PyArrow 테이블, Arrow 기반 DataFrame에서 작동하는 특수 삽입 메서드는 고급 삽입(특수 삽입 메서드)를 참조하십시오.
NumPy 배열은 유효한 Sequence of Sequences이므로 기본
insert 메서드의 data 인수로 사용할 수 있으며, 별도의 특수 메서드는 필요하지 않습니다.예시
(id UInt32, name String, age UInt8)인 기존 users 테이블(table)이 이미 있다고 가정합니다.
기본적인 행 지향 삽입
컬럼 지향 방식 삽입
명시적으로 컬럼 타입을 지정해 삽입
특정 데이터베이스에 삽입하기
파일 삽입
Raw API
유틸리티 클래스와 함수
clickhouse-connect API의 일부로 간주되며, 위에 문서화된 클래스 및 메서드와 마찬가지로 마이너 릴리스 전반에 걸쳐 안정적으로 유지됩니다. 이러한 클래스와 함수에 대한 호환성 깨짐 변경은 마이너 릴리스(패치 릴리스 제외)에서만 발생하며, 최소 한 번의 마이너 릴리스 동안 Deprecated 상태로 제공됩니다.
예외
clickhouse_connect.driver.exceptions 모듈에 정의되어 있습니다. 드라이버가 실제로 감지하는 예외는 이들 타입 중 하나로 처리됩니다.
ClickHouse SQL 유틸리티
clickhouse_connect.driver.binding 모듈의 함수와 DT64Param 클래스는 ClickHouse SQL 쿼리를 올바르게 구성하고 이스케이프 처리하는 데 사용할 수 있습니다. 마찬가지로 clickhouse_connect.driver.parser 모듈의 함수는 ClickHouse 데이터 타입 이름을 파싱하는 데 사용할 수 있습니다.