Java クライアント
DBサーバーとそのプロトコルを通じて通信するためのJavaクライアントライブラリ。現在の実装ではHTTPインターフェースのみをサポートしています。 このライブラリは、サーバーへのリクエスト送信用の独自APIを提供します。また、異なるバイナリデータ形式(RowBinary* & Native*)を扱うためのツールも提供します。
セットアップ
- Maven Central (プロジェクトのWebページ) : https://mvnrepository.com/artifact/com.clickhouse/client-v2
- ナイトリービルド (リポジトリへのリンク) :https://central.sonatype.com/repository/maven-snapshots/
- 旧Nightlyビルド用 Artifactory (リポジトリリンク) :https://s01.oss.sonatype.org/content/repositories/snapshots/
- Maven
- Gradle (Kotlin)
- Gradle
初期化
Clientオブジェクトは com.clickhouse.client.api.Client.Builder#build() によって初期化されます。各クライアントは独自のコンテキストを持ち、オブジェクトはクライアント間で共有されません。
Builder には設定を簡単に行うための構成メソッドが用意されています。
例:
ClientはAutoCloseableを実装しており、不要になったら必ずクローズする必要があります。
認証
認証は初期化時にクライアントごとに設定します。サポートされている認証方式は3種類あり、パスワード認証、アクセストークン認証、SSL クライアント証明書認証です。
パスワードによる認証では、setUsername(String) と setPassword(String) を呼び出してユーザー名とパスワードを設定する必要があります:
アクセストークンで認証するには、setAccessToken(String) を呼び出してアクセストークンを設定する必要があります:
SSLクライアント証明書による認証を行うには、setUsername(String)、useSSLAuthentication(boolean)、setClientCertificate(String)、setClientKey(String) をそれぞれ呼び出して、ユーザー名の設定、SSL認証の有効化、クライアント証明書とクライアントキーの設定を行う必要があります。
SSL認証は、SSLライブラリからの多くのエラーが十分な情報を提供しないため、本番環境ではトラブルシューティングが難しい場合があります。例えば、クライアント証明書と秘密鍵が一致しないと、サーバーは接続を直ちに切断します (HTTPの場合は接続確立時で、まだHTTPリクエストが送信されていないため、レスポンスは返されません) 。
証明書および鍵の検証には、openssl などのツールを使用してください:
- 秘密鍵の整合性をチェック:
openssl rsa -in [key-file.key] -check -noout - クライアント証明書の CN がユーザー名と一致していることを確認します:
- ユーザーの証明書から CN を取得します -
openssl x509 -noout -subject -in [user.cert] - 次のクエリを実行して、同じ値がデータベース側に設定されていることを確認します:
select name, auth_type, auth_params from system.users where auth_type = 'ssl_certificate'(このクエリの結果では、auth_paramsに{"common_names":["some_user"]}のような値が出力されます)
- ユーザーの証明書から CN を取得します -
設定
すべての設定はインスタンスメソッド (いわゆる構成メソッド) によって定義され、各値のスコープとコンテキストが明確になります。 主要な構成パラメータは1つのスコープ (クライアントまたはオペレーション) で定義され、互いに上書きされることはありません。
設定はクライアントの作成時に定義されます。com.clickhouse.client.api.Client.Builderを参照してください。
クライアント構成
- 接続とエンドポイント
- 認証
- タイムアウトとリトライ
- ソケットオプション
- 圧縮
- SSL/セキュリティ
- プロキシ
- HTTP とヘッダー
- サーバー設定
- タイムゾーン
- 詳細設定
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
addEndpoint(String endpoint) | endpoint - URL 形式のサーバーアドレス | 利用可能なサーバーのリストにサーバーエンドポイントを追加します。現在は 1 つのエンドポイントのみがサポートされています。 | none | none |
addEndpoint(Protocol protocol, String host, int port, boolean secure) | protocol - 接続プロトコルhost - IP もしくはホスト名secure - HTTPS を使用するかどうか | 利用可能なサーバーのリストにサーバーエンドポイントを追加します。現在は 1 つのエンドポイントのみがサポートされています。 | none | none |
enableConnectionPool(boolean enable) | enable - 有効/無効を切り替えるフラグ | コネクションプールを有効にするかどうかを設定します。 | true | connection_pool_enabled |
setMaxConnections(int maxConnections) | maxConnections - コネクション数 | 各サーバーエンドポイントに対してクライアントが開くことができる接続数の上限を設定します。 | 10 | max_open_connections |
setConnectionTTL(long timeout, ChronoUnit unit) | timeout - タイムアウト値unit - 時間単位 | 接続が非アクティブと見なされるまでの有効期限 (TTL) を設定します。 | -1 | connection_ttl |
setKeepAliveTimeout(long timeout, ChronoUnit unit) | timeout - タイムアウト値unit - 時間単位 | HTTP 接続の Keep-Alive タイムアウトを設定します。Keep-Alive を無効にするには 0 を設定します。 | - | http_keep_alive_timeout |
setConnectionReuseStrategy(ConnectionReuseStrategy strategy) | strategy - LIFO または FIFO | コネクションプールが使用する接続再利用戦略を選択します。 | FIFO | connection_reuse_strategy |
setDefaultDatabase(String database) | database - データベース名 | デフォルトデータベースを設定します。 | default | database |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
setUsername(String username) | username - 認証用のユーザー名 | 追加の設定によって選択される認証方式で使用するユーザー名を設定します | default | user |
setPassword(String password) | password - シークレット値 | パスワード認証用のシークレットを設定し、事実上その認証方式を選択します | - | password |
setAccessToken(String accessToken) | accessToken - アクセストークン文字列 | アクセストークンを設定し、対応する認証方式での認証に使用されるようにします | - | access_token |
useSSLAuthentication(boolean useSSLAuthentication) | useSSLAuthentication - SSL 認証を有効化するフラグ | SSL クライアント証明書を認証方式として使用するように設定します | - | ssl_authentication |
useHTTPBasicAuth(boolean useBasicAuth) | useBasicAuth - 有効/無効を切り替えるフラグ | ユーザー名とパスワードによる認証において、Basic HTTP 認証を使用するかどうかを設定します。特殊文字を含むパスワードによる問題の解消に役立ちます。 | true | http_use_basic_auth |
useBearerTokenAuth(String bearerToken) | bearerToken - エンコード済み Bearer トークン | Bearer 認証を使用するかどうかと、使用するトークンを指定します。トークンはそのまま送信されます。 | - | bearer_token |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
setConnectTimeout(long timeout, ChronoUnit unit) | timeout - タイムアウト値unit - 時間単位 | すべての発信側接続について、接続確立のタイムアウトを設定します。 | - | connection_timeout |
setConnectionRequestTimeout(long timeout, ChronoUnit unit) | timeout - タイムアウト値unit - 時間単位 | 接続要求のタイムアウトを設定します。これはプールから接続を取得する場合にのみ有効です。 | 10000 | connection_request_timeout |
setSocketTimeout(long timeout, ChronoUnit unit) | timeout - タイムアウト値unit - 時間単位 | 読み取りおよび書き込み操作に影響するソケットタイムアウトを設定します。 | 0 | socket_timeout |
setExecutionTimeout(long timeout, ChronoUnit timeUnit) | timeout - タイムアウト値timeUnit - 時間単位 | クエリの最大実行時間を設定します。 | 0 | max_execution_time |
retryOnFailures(ClientFaultCause ...causes) | causes - ClientFaultCause の enum 定数 | リカバリ可能/再試行可能な障害種別を設定します。 | NoHttpResponse ConnectTimeout ConnectionRequestTimeout | client_retry_on_failures |
setMaxRetries(int maxRetries) | maxRetries - 再試行回数 | retryOnFailures で定義された障害に対する最大再試行回数を設定します。 | 3 | retry |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
setSocketRcvbuf(long size) | size - バイト数 | TCP ソケットの受信バッファを設定します。このバッファは JVM 管理外のメモリ上に確保されます。 | 8196 | socket_rcvbuf |
setSocketSndbuf(long size) | size - バイト数 | TCP ソケットの送信バッファを設定します。このバッファは JVM 管理外のメモリ上に確保されます。 | 8196 | socket_sndbuf |
setSocketKeepAlive(boolean value) | value - 有効/無効を示すフラグ | すべての TCP ソケットに対してオプション SO_KEEPALIVE を設定します。TCP Keep-Alive 機構を有効にし、接続の生存状態を監視します。 | - | socket_keepalive |
setSocketTcpNodelay(boolean value) | value - 有効/無効を示すフラグ | すべての TCP ソケットに対してオプション SO_NODELAY を設定します。この TCP オプションにより、ソケットは可能な限り速やかにデータを送信します。 | - | socket_tcp_nodelay |
setSocketLinger(int secondsToWait) | secondsToWait - 秒数 | クライアントが作成するすべての TCP ソケットに対して linger 時間を設定します。 | - | socket_linger |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
compressServerResponse(boolean enabled) | enabled - 有効/無効を示すフラグ | サーバーがレスポンスを圧縮するかどうかを指定します。 | true | compress |
compressClientRequest(boolean enabled) | enabled - 有効/無効を示すフラグ | クライアントがリクエストを圧縮するかどうかを指定します。 | false | decompress |
useHttpCompression(boolean enabled) | enabled - 有効/無効を示すフラグ | 対応するオプションが有効な場合に、クライアント/サーバー間の通信で HTTP 圧縮を使用するかどうかを指定します。 | - | - |
appCompressedData(boolean enabled) | enabled - 有効/無効を示すフラグ | 圧縮処理がアプリケーション側で行われることをクライアントに通知します。 | false | app_compressed_data |
setLZ4UncompressedBufferSize(int size) | size - バイト単位のサイズ | データストリーム内の非圧縮部分を受信するバッファのサイズを設定します。 | 65536 | compression.lz4.uncompressed_buffer_size |
disableNativeCompression | disable - 無効化を示すフラグ | ネイティブ圧縮を無効にします。true の場合、ネイティブ圧縮は無効になります。 | false | disable_native_compression |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
setSSLTrustStore(String path) | path - ローカルシステム上のファイルパス | クライアントがサーバーホストの検証のために SSL トラストストアを使用するかどうかを設定します。 | - | trust_store |
setSSLTrustStorePassword(String password) | password - シークレット値 | setSSLTrustStore で指定した SSL トラストストアのロック解除に使用するパスワードを設定します。 | - | key_store_password |
setSSLTrustStoreType(String type) | type - truststore のタイプ名 | setSSLTrustStore で指定したトラストストアの種類を設定します。 | - | key_store_type |
setRootCertificate(String path) | path - ローカルシステム上のファイルパス | サーバーホストの検証に、指定したルート (CA) 証明書をクライアントが使用するかどうかを設定します。 | - | sslrootcert |
setClientCertificate(String path) | path - ローカルシステム上のファイルパス | SSL 接続の確立時および SSL 認証で使用するクライアント証明書のパスを設定します。 | - | sslcert |
setClientKey(String path) | path - ローカルシステム上のファイルパス | サーバーとの SSL 通信を暗号化するために使用するクライアント秘密鍵を設定します。 | - | ssl_key |
sslSocketSNI(String sni) | sni - サーバー名を表す文字列 | SSL/TLS 接続において SNI (Server Name Indication) に使用するサーバー名を設定します。 | - | ssl_socket_sni |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
addProxy(ProxyType type, String host, int port) | type - プロキシの種類host - プロキシのホスト名または IPport - プロキシのポート番号 | サーバーとの通信に使用するプロキシを設定します。 | - | proxy_type, proxy_host, proxy_port |
setProxyCredentials(String user, String pass) | user - プロキシのユーザー名pass - パスワード | プロキシ認証に使用するユーザー名とパスワードを設定します。 | - | proxy_user, proxy_password |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
setHttpCookiesEnabled(boolean enabled) | enabled - 有効/無効を切り替えるフラグ | HTTP Cookie を保持し、サーバーに送り返すかどうかを設定します。 | - | - |
httpHeader(String key, String value) | key - HTTP ヘッダーのキーvalue - 文字列値 | 単一の HTTP ヘッダー値を設定します。以前の値は上書きされます。 | none | none |
httpHeader(String key, Collection values) | key - HTTP ヘッダーのキーvalues - 文字列値のリスト | 単一の HTTP ヘッダーに複数の値を設定します。以前の値は上書きされます。 | none | none |
httpHeaders(Map headers) | headers - HTTP ヘッダーを含むマップ | 複数の HTTP ヘッダー値をまとめて設定します。 | none | none |
useHttpFormDataForQuery(boolean enable) | enable - 有効/無効を切り替えるフラグ | クエリパラメータを URL ではなく、リクエストボディ内の HTTP フォームデータとして送信するかどうかを設定します。サーバー側圧縮が有効な場合にのみ動作します。クライアント側の圧縮が有効な場合、各パラメータがマルチパートコンテンツとして送信されるため、パラメータ付きクエリリクエストではクライアント側の圧縮は無効化されます。 | false | client.http.use_form_request_for_query |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
serverSetting(String name, String value) | name - 設定名value - 設定値 | 各クエリとともにサーバーへ渡す設定を指定します。個々の操作で指定された設定によって上書きされる場合があります。 設定の一覧 | none | none |
serverSetting(String name, Collection values) | name - 設定名values - 設定値のコレクション | サーバーへ渡す設定を複数の値で指定します。たとえばrolesのようなケースで利用します。 | none | none |
setOption("custom_settings_prefix", value) | value - プレフィックス文字列 | サーバーに渡すカスタム設定のプレフィックスを設定します。サーバー側の構成と一致している必要があります。ClickHouse ドキュメント を参照してください。 | custom_ | custom_settings_prefix |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
useServerTimeZone(boolean useServerTimeZone) | useServerTimeZone - 有効/無効を切り替えるフラグ | クライアントが DateTime および Date カラム値をデコードする際に、サーバーのタイムゾーンを使用するかどうかを設定します。 | true | use_server_time_zone |
useTimeZone(String timeZone) | timeZone - Java の有効なタイムゾーン ID | 指定したタイムゾーンを、DateTime および Date カラム値をデコードする際に使用するように設定します。サーバーのタイムゾーン設定を上書きします。 | - | use_time_zone |
setServerTimeZone(String timeZone) | timeZone - Java の有効なタイムゾーン ID | サーバー側のタイムゾーンを設定します。デフォルトでは UTC タイムゾーンが使用されます。 | UTC | server_time_zone |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
setOption(String key, String value) | key - 設定オプションのキーvalue - オプション値 | クライアントオプションの生の値を設定します。プロパティファイルから設定を読み込む場合に有用です。 | - | - |
useAsyncRequests(boolean async) | async - 有効/無効を切り替えるフラグ | クライアントがリクエストを別スレッドで実行するかどうかを設定します。アプリケーション側がマルチスレッド処理をより適切に制御できるため、デフォルトでは無効です。 | false | async |
setSharedOperationExecutor(ExecutorService executorService) | executorService - ExecutorService インスタンス | 操作タスク用の ExecutorService を設定します。 | none | none |
setQueryIdGenerator(Supplier<String> supplier) | supplier - クエリ ID を生成する Supplier<String> | 操作設定 (InsertSettings、QuerySettings) でクエリ ID が指定されていない場合に使用される、カスタムクエリ ID ジェネレータを設定します。 | - | - |
setClientNetworkBufferSize(int size) | size - バイト単位のサイズ | ソケットとアプリケーション間でデータをコピーする際に使用される、アプリケーションメモリ空間内のバッファサイズを設定します。 | 300000 | client_network_buffer_size |
allowBinaryReaderToReuseBuffers(boolean reuse) | reuse - 有効/無効を切り替えるフラグ | 有効にした場合、リーダーは数値変換を行うために事前割り当てされたバッファを再利用します。数値データに対する GC プレッシャーを軽減します。 | - | - |
columnToMethodMatchingStrategy(ColumnToMethodMatchingStrategy strategy) | strategy - マッチング戦略の実装クラス | DTO を登録する際に、DTO クラスのフィールドと DB のカラムをマッチングするために使用するカスタム戦略を設定します。 | none | none |
setClientName(String clientName) | clientName - アプリケーション名文字列 | 呼び出し元アプリケーションに関する追加情報を設定します。User-Agent ヘッダーとして渡されます。 | - | client_name |
registerClientMetrics(Object registry, String name) | registry - Micrometer レジストリインスタンスname - メトリクスグループ名 | Micrometer (https://micrometer.io/) のレジストリインスタンスにメトリクスを登録します。 | - | - |
setServerVersion(String version) | version - サーバーバージョン文字列 | バージョン検出をスキップするために、サーバーバージョンを設定します。 | - | server_version |
typeHintMapping(Map typeHintMapping) | typeHintMapping - 型ヒントのマップ | ClickHouse 型に対する型ヒントのマッピングを設定します。例えば、多次元配列を Java のコンテナとして表現できるようにする場合などに使用します。 | - | type_hint_mapping |
クライアントの識別
クエリログには、リクエストの発信元アプリケーションを識別するフィールドが2つあります: client_name と http_user_agent。ネイティブTCPプロトコルではアプリケーション識別に client_name を使用し、HTTPプロトコルでは http_user_agent を使用します。クライアントビルダーには両プロトコルに対して正しい値を設定する setClientName メソッドがあります。
http_user_agent フィールドは User-Agent ヘッダーの一般的な形式に従って設定されます: application-name[/version] [(operating-system; architecture; ...)]。
この値のセットはアプリケーション、クライアントライブラリ、HTTPクライアントライブラリの各レイヤーごとに繰り返されます。setClientName メソッドで設定されたものがリストの先頭に来ます。
例えば:
これにより、次の http_user_agent 値が生成されます:
アプリケーションは自身を識別するために独自のHTTPヘッダー User-Agent を設定できます。ただし、clickhouse-java-v2/0.9.6-SNAPSHOT の部分がヘッダーの末尾に追加されます。
操作識別
クエリログには、操作を識別しクエリログに追加情報を付加するために使用できる query_id と log_comment という2つのフィールドがあります。
query_id は操作の一意の識別子です。アプリケーションが QuerySettings クラスの setQueryId メソッドを呼び出すことで設定できます。
log_comment はクエリログに追加できるコメントです。QuerySettings クラスの logComment メソッドを呼び出すことで、アプリケーションから設定できます。
サーバー設定
サーバー側の設定は、クライアント作成時の初期化フェーズに一度だけクライアントレベルで設定できます (BuilderのserverSettingメソッドを参照) 。また、操作ごとに操作レベルでも設定できます (操作設定クラスのserverSettingを参照) 。
⚠️ setOptionメソッド (Client.Builder または操作設定クラス) でオプションを設定する場合、サーバー設定名には clickhouse_setting_ をプレフィックスとして付ける必要があります。この場合、com.clickhouse.client.api.ClientConfigProperties#serverSetting() が便利です。
カスタムHTTPヘッダー
カスタムHTTPヘッダーは、すべての操作(クライアントレベル)に対して設定することも、単一の操作(操作レベル)に対して設定することもできます。
setOptionメソッド (Client.Builder または操作設定クラスのいずれか) でオプションを設定する場合、カスタムヘッダー名には http_header_ のプレフィックスを付ける必要があります。この場合には、com.clickhouse.client.api.ClientConfigProperties#httpHeader() メソッドを利用すると便利です。
共通定義
ClickHouseFormat
サポートされている形式の列挙型 (Enum) です。ClickHouse がサポートするすべての形式を含みます。
raw- ユーザーが生データをトランスコードする必要がありますfull- クライアントがデータのトランスコードを自前で行い、生のデータストリームをそのまま受け取れます-- この形式では ClickHouse がサポートしない操作
このクライアントバージョンでサポートされるのは次のとおりです:
Insert API
insert(String tableName, InputStream data, ClickHouseFormat format)
指定されたフォーマットでエンコードされたバイト列をInputStreamとして受け取ります。dataはformatでエンコードされていることが前提です。
シグネチャ
パラメータ
tableName - 対象テーブルの名前。
data - エンコード済みデータを含む入力ストリーム。
format - データがエンコードされている形式。
settings - リクエストの設定。
戻り値
InsertResponse 型の Future。操作結果およびサーバー側メトリクスなどの追加情報を含みます。
例
insert(String tableName, List<?> data, InsertSettings settings)
データベースに書き込みリクエストを送信します。オブジェクトのリストは効率的な形式に変換され、その後サーバーに送信されます。リスト項目のクラスは register(Class, TableSchema) メソッドを使って事前に登録しておく必要があります。
署名
パラメータ
tableName - 対象テーブル名。
data - DTO (Data Transfer Object) オブジェクトのコレクション。
settings - リクエスト設定。
戻り値
InsertResponse 型の Future — 操作の結果やサーバー側のメトリクスなどの追加情報。
例
InsertSettings
挿入操作の構成オプション。
設定メソッド
| Method | Description |
|---|---|
setQueryId(String queryId) | 操作に割り当てられるクエリ ID を設定します。デフォルト: null。 |
setDeduplicationToken(String token) | 重複排除トークンを設定します。このトークンはサーバーに送信され、クエリの識別に利用できます。デフォルト: null。 |
setInputStreamCopyBufferSize(int size) | コピー用バッファのサイズ。書き込み処理時に、ユーザー提供の入力ストリームから出力ストリームへデータをコピーするために使用されます。デフォルト: 8196。 |
serverSetting(String name, String value) | 操作単位で個別のサーバー設定を指定します。 |
serverSetting(String name, Collection values) | 操作に対して、1 つのサーバー設定に複数の値を設定します。コレクションの要素は String 型の値である必要があります。 |
setDBRoles(Collection dbRoles) | 操作の実行前に有効にする DB ロールを設定します。コレクションの要素はすべて String 値である必要があります。 |
setOption(String option, Object value) | 構成オプションを生の値として設定します。これはサーバー設定ではありません。 |
InsertResponse
挿入操作の結果を保持するレスポンスオブジェクト。クライアントがサーバーからレスポンスを受信した場合にのみ利用できます。
このオブジェクトは接続を解放するために、可能な限り早くクローズする必要があります。前のレスポンスのすべてのデータが完全に読み取られるまで、その接続を再利用することはできません。
| メソッド | 説明 |
|---|---|
OperationMetrics getMetrics() | 操作メトリクスを含むオブジェクトを返します。 |
String getQueryId() | 操作に対して、アプリケーション (操作設定経由) またはサーバーによって割り当てられたクエリ ID を返します。 |
クエリAPI
query(String sqlQuery)
sqlQueryをそのまま送信します。レスポンス形式はクエリ設定によって決まります。QueryResponseは、対応する形式をサポートするリーダーが読み取るべきレスポンスストリームへの参照を保持します。
シグネチャ
パラメータ
sqlQuery - 単一の SQL ステートメントを表します。クエリはそのままサーバーに送信されます。
settings - リクエストの設定。
戻り値
QueryResponse型の Future — 結果データセットおよびサーバー側メトリクスなどの追加情報。データセットを使い終わったら Response オブジェクトをクローズする必要があります。
例
query(String sqlQuery, Map<String, Object> queryParams, QuerySettings settings)
sqlQueryをそのまま送信します。加えて、サーバーがSQL式をコンパイルできるようにクエリパラメータも送信します。
シグネチャ
パラメータ
sqlQuery - {} プレースホルダーを含む SQL 式。
queryParams - サーバー側で SQL 式を完成させるための変数のマップ。
settings - リクエストの設定。
戻り値
QueryResponse 型の Future であり、結果データセットおよびサーバー側メトリクスなどの追加情報を含みます。データセットの読み取りが完了したら、Response オブジェクトをクローズする必要があります。
例
queryAll(String sqlQuery)
RowBinaryWithNamesAndTypes形式でデータをクエリします。結果はコレクションとして返されます。読み取りパフォーマンスはリーダーと同じですが、データセット全体を保持するためにより多くのメモリが必要になります。
署名
パラメータ
sqlQuery - サーバー上のデータをクエリするための SQL 式。
戻り値
結果データに行単位でアクセスできるGenericRecordオブジェクトのリストで表現される完全なデータセット。
例
QuerySettings
クエリ操作の構成オプション。
設定メソッド
| メソッド | 説明 |
|---|---|
setQueryId(String queryId) | 操作に割り当てるクエリ ID を設定します。 |
setFormat(ClickHouseFormat format) | レスポンス形式を設定します。利用可能な形式の全一覧については RowBinaryWithNamesAndTypes を参照してください。 |
setMaxExecutionTime(Integer maxExecutionTime) | サーバー上での操作の最大実行時間を設定します。読み取りタイムアウトには影響しません。 |
waitEndOfQuery(Boolean waitEndOfQuery) | レスポンスを返す前にクエリの終了を待機するようサーバーに要求します。 |
setUseServerTimeZone(Boolean useServerTimeZone) | サーバーのタイムゾーン (クライアント設定を参照) が、操作結果内の日時型の値をパースする際に使用されます。デフォルトは false です。 |
setUseTimeZone(String timeZone) | サーバーに対して、時刻変換のために timeZone を使用するよう要求します。session_timezone を参照してください。 |
serverSetting(String name, String value) | 操作ごとに個別のサーバー設定を指定します。 |
serverSetting(String name, Collection values) | 操作に対して、1 つのサーバー設定に複数の値を設定します。コレクションの要素は String 型の値である必要があります。 |
setDBRoles(Collection dbRoles) | 操作の実行前に適用する DB ロールを設定します。コレクションの要素はすべて String 値である必要があります。 |
setOption(String option, Object value) | 構成オプションを生の値として設定します。これはサーバー設定ではありません。 |
QueryResponse
クエリの実行結果を保持するレスポンスオブジェクトです。クライアントがサーバーからレスポンスを受け取った場合にのみ利用可能です。
このオブジェクトは接続を解放するため、できるだけ早くクローズする必要があります。直前のレスポンスのすべてのデータが完全に読み取られるまで、その接続は再利用できません。
| メソッド | 説明 |
|---|---|
ClickHouseFormat getFormat() | レスポンス内のデータがエンコードされているフォーマットを返します。 |
InputStream getInputStream() | 指定されたフォーマットでエンコードされた非圧縮データのバイトストリームを返します。 |
OperationMetrics getMetrics() | 操作メトリクスを保持するオブジェクトを返します。 |
String getQueryId() | アプリケーション (操作設定経由) またはサーバーによって、この操作に割り当てられたクエリ ID を返します。 |
TimeZone getTimeZone() | レスポンス内の Date/DateTime 型を処理する際に使用すべきタイムゾーンを返します。 |
例
共通 API
getTableSchema(String table)
tableテーブルのスキーマを取得します。
署名
パラメーター
table - スキーマデータを取得する対象テーブル名。
database - 対象テーブルが定義されているデータベース。
戻り値
テーブルのカラム一覧を含む TableSchema オブジェクトを返します。
getTableSchemaFromQuery(String sql)
SQL文からスキーマを取得します。
署名
パラメータ
sql - スキーマを返すための "SELECT" SQL ステートメント。
戻り値
sql式に対応するカラムを含むTableSchemaオブジェクトを返します。
TableSchema
register(Class<?> clazz, TableSchema schema)
Java クラスが schema を使用してデータの書き込み/読み取りを行うためのシリアライゼーションおよびデシリアライゼーション層をコンパイルします。このメソッドは、getter/setter のペアごとに、対応するカラム向けのシリアライザーとデシリアライザーを作成します。
カラムのマッチングは、メソッド名からカラム名を抽出することで行われます。例えば、getFirstName はカラム first_name または firstname に対応します。
シグネチャ
パラメータ
clazz - データの読み取り/書き込みに使用する POJO を表すクラス。
schema - POJOプロパティと照合するために使用するデータスキーマ。
例
使用例
完全なサンプルコードは、リポジトリ内の example フォルダに配置されています:
- client-v2 - 主なサンプルセットです。
- demo-service - Spring Boot アプリケーションでクライアントを利用するサンプル。
- demo-kotlin-service - Ktor (Kotlin) アプリケーションでクライアントを使用する方法のサンプルです。
データの読み取り
データを読み込む一般的な方法は2つあります。
query()メソッドは、データを含むInputStreamを保持する低レベルなQueryResponseオブジェクトを返します。通常はストリーミング読み取りのためにClickHouseBinaryFormatReaderと組み合わせて使用されますが、 他の任意のカスタムリーダー実装でも利用できます。QueryResponseは、結果セットのメタデータおよびメトリクスへのアクセスも提供します。queryAll()メソッドとGenericRecordを使用すると、行単位で結果にアクセスできます。この場合、結果セット全体がメモリに読み込まれます。queryRecords()メソッドはcom.clickhouse.client.api.query.Recordsを返し、これはGenericRecordオブジェクトのイテレータです。このメソッドはストリーミング方式で動作するため (データはメモリにロードされません) 、GenericRecordを利用してデータにアクセスします。
注意: ストリーミング方式ではデータをネットワークストリームから直接読み取るため、高速に読み取る必要があります。そうでない場合、サーバー側の書き込みタイムアウトが発生する可能性があります。
配列の読み取り
ClickHouseBinaryFormatReader メソッド
getList(...)- 任意のArray(...)をList<T>として読み取ります。柔軟に型を扱う読み取りのデフォルトとして適しています。ネストされた配列をサポートします。getByteArray(...),getShortArray(...),getIntArray(...),getLongArray(...),getFloatArray(...),getDoubleArray(...),getBooleanArray(...)- プリミティブ型互換の値で構成された一次元配列に最適です。getStringArray(...)-Array(String)型 (および名前で表現される enum 値) 向け。getObjectArray(...)- ネストされた配列を含む任意のArray(...)要素型に対応する汎用的なオプションです。Nullable な値やネストされた配列を含む配列を読み取るために使用します。
すべてのメソッドに対して、インデックスベースと名前ベースのオーバーロードが利用可能です。インデックスは1始まりです。インデックスベースのメソッドはカラムへ直接アクセスします。 名前ベースのメソッドは、毎回インデックスの検索が必要です。
GenericRecord のメソッド
getList(...)- 任意のArray(...)をList<T>として読み取ります。柔軟な型付き読み取りのデフォルトとして利用できます。ネストされた配列をサポートします。getByteArray(...),getShortArray(...),getIntArray(...),getLongArray(...),getFloatArray(...),getDoubleArray(...),getBooleanArray(...)- プリミティブ互換の値で構成された一次元配列に最適です。getStringArray(...)-Array(String)型 (および名前で表現される enum 値) 向け。getObjectArray(...)- ネストされた配列を含む任意のArray(...)要素型に対応する汎用的なオプションです。Nullable な値を含む配列やネストされた配列を読み取るために使用します。
すべてのメソッドには、インデックス指定および名前指定のオーバーロードが用意されています。インデックスは1始まりです。インデックス指定のメソッドはカラムに直接アクセスします。 名前指定のメソッドは、毎回インデックスの検索が発生します。
V2 TSV形式データの挿入
- 呼び出すメソッドは 1 つだけで、別途リクエストオブジェクトを作成する必要はありません。
- リクエストボディストリームは、すべてのデータのコピーが完了すると自動的にクローズされます。
- 新しい低レベル API
com.clickhouse.client.api.Client#insert(java.lang.String, java.util.List<java.lang.String>, com.clickhouse.client.api.DataStreamWriter, com.clickhouse.data.ClickHouseFormat, com.clickhouse.client.api.insert.InsertSettings)が利用可能です。com.clickhouse.client.api.DataStreamWriterは独自のデータ書き込みロジックを実装できるように設計されています。たとえば、キューからデータを読み出すようなケースです。
データの読み取り
- データはデフォルトで
RowBinaryWithNamesAndTypesフォーマットで読み取られます。現在、データバインディングが必要な場合にサポートされるのはこのフォーマットのみです。 List<GenericRecord> com.clickhouse.client.api.Client#queryAll(java.lang.String)メソッドを使用すると、データをレコードのコレクションとして読み取ることができます。このメソッドはデータをメモリに読み込み、接続を解放します。追加のリソース管理は不要です。GenericRecordはデータへのアクセス手段を提供し、一部の型変換も実装しています。