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 を取得します -
設定
すべての設定はインスタンスメソッド(構成メソッドとも呼ばれる)によって定義され、各値のスコープとコンテキストが明確になります。 主要な構成パラメータは単一のスコープ(クライアントまたはオペレーション)で定義され、相互に上書きされることはありません。
設定はクライアント作成時に定義します。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 |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
serverSetting(String name, String value) | name - 設定名value - 設定値 | 各クエリとともにサーバーへ渡す設定を指定します。個々の操作で指定された設定によって上書きされる場合があります。 設定の一覧 | none | none |
serverSetting(String name, Collection values) | name - 設定名values - 設定値 | サーバーへ複数の値を持つ設定を渡します。たとえば roles などがあります。 | none | none |
| 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 |
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 |
サーバー設定
サーバー側設定は、クライアント作成時に一度クライアントレベルで設定できます(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
サポートされている形式の列挙型。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
挿入操作の構成オプション。
構成方法
| メソッド | 説明 |
|---|---|
setQueryId(String queryId) | 操作に割り当てられるクエリ ID を設定します。デフォルト値: null。 |
setDeduplicationToken(String token) | 重複排除用トークンを設定します。このトークンはサーバーに送信され、クエリを識別するために使用できます。デフォルト: null。 |
setInputStreamCopyBufferSize(int size) | コピー用バッファのサイズ。書き込み処理中に、ユーザー提供の入力ストリームから出力ストリームへデータをコピーするために使用されます。デフォルト: 8196。 |
serverSetting(String name, String value) | 操作に対するサーバーの個別設定を指定します。 |
serverSetting(String name, Collection values) | 操作に対して複数の値を取る個別のサーバー設定を指定します。コレクションの要素は 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) | 操作時に複数の値を持つ個々のサーバー設定を構成します。コレクションの各要素は 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)アプリケーションにおけるクライアントの使用例です。
移行ガイド
旧クライアント(V1)はcom.clickhouse.client.ClickHouseClient#builderを開始点として使用していました。新クライアント(V2)はcom.clickhouse.client.api.Client.Builderを使用した同様のパターンを採用しています。主な相違点は以下の通りです:
- 実装を取得するために service loader は使用しません。
com.clickhouse.client.api.Clientは、将来的にあらゆる種類の実装を扱うためのファサードクラスです。 - 構成情報のソースが少なくなりました。1つはビルダーに渡されるもので、もう1つは操作設定(
QuerySettings、InsertSettings)です。以前のバージョンではノードごとの構成があり、場合によっては環境変数を読み込んでいました。
設定パラメータの一致
V1には、設定に関連する3つの列挙型クラスがあります:
com.clickhouse.client.config.ClickHouseDefaults- ほとんどのユースケースで設定されることを想定したパラメータです。例えばUSERやPASSWORDなどがあります。com.clickhouse.client.config.ClickHouseClientOption- クライアント専用の設定パラメータで、HEALTH_CHECK_INTERVALなどがあります。com.clickhouse.client.http.config.ClickHouseHttpOption- HTTP インターフェイスに固有の設定パラメータ(例:RECEIVE_QUERY_PROGRESS)。
これらはパラメータをグループ化し、明確に分離するように設計されていました。しかし、場合によっては混乱を招くことがありました(com.clickhouse.client.config.ClickHouseDefaults#ASYNCとcom.clickhouse.client.config.ClickHouseClientOption#ASYNCの間に違いはあるのか)。 新しいV2クライアントは、すべてのクライアント設定オプションを格納する単一のDictionaryとしてcom.clickhouse.client.api.Client.Builderを使用します。すべての設定パラメータ名がリストされているcom.clickhouse.client.api.ClientConfigPropertiesが存在します。
以下の表は、新しいクライアントでサポートされている旧オプションと、その新しい意味を示しています。
凡例: ✔ = サポート、✗ = 非サポート
- 接続と認証
- SSL とセキュリティ
- ソケットオプション
- 圧縮
- プロキシ
- タイムアウトとリトライ
- タイムゾーン
- バッファとパフォーマンス
- スレッドと非同期処理
- HTTP とヘッダー
- フォーマット & クエリ
- ノードディスカバリと負荷分散
- その他
| V1 設定値 | V2 Builder メソッド | コメント |
|---|---|---|
ClickHouseDefaults#HOST | Client.Builder#addEndpoint | |
ClickHouseDefaults#PROTOCOL | ✗ | V2 では HTTP のみをサポート |
ClickHouseDefaults#DATABASEClickHouseClientOption#DATABASE | Client.Builder#setDefaultDatabase | |
ClickHouseDefaults#USER | Client.Builder#setUsername | |
ClickHouseDefaults#PASSWORD | Client.Builder#setPassword | |
ClickHouseClientOption#CONNECTION_TIMEOUT | Client.Builder#setConnectTimeout | |
ClickHouseClientOption#CONNECTION_TTL | Client.Builder#setConnectionTTL | |
ClickHouseHttpOption#MAX_OPEN_CONNECTIONS | Client.Builder#setMaxConnections | |
ClickHouseHttpOption#KEEP_ALIVEClickHouseHttpOption#KEEP_ALIVE_TIMEOUT | Client.Builder#setKeepAliveTimeout | |
ClickHouseHttpOption#CONNECTION_REUSE_STRATEGY | Client.Builder#setConnectionReuseStrategy | |
ClickHouseHttpOption#USE_BASIC_AUTHENTICATION | Client.Builder#useHTTPBasicAuth |
| V1 Configuration | V2 Builder Method | コメント |
|---|---|---|
ClickHouseDefaults#SSL_CERTIFICATE_TYPE | ✗ | |
ClickHouseDefaults#SSL_KEY_ALGORITHM | ✗ | |
ClickHouseDefaults#SSL_PROTOCOL | ✗ | |
ClickHouseClientOption#SSL | ✗ | Client.Builder#addEndpoint を参照 |
ClickHouseClientOption#SSL_MODE | ✗ | |
ClickHouseClientOption#SSL_ROOT_CERTIFICATE | Client.Builder#setRootCertificate | useSSLAuthentication で SSL 認証を有効にします |
ClickHouseClientOption#SSL_CERTIFICATE | Client.Builder#setClientCertificate | |
ClickHouseClientOption#SSL_KEY | Client.Builder#setClientKey | |
ClickHouseClientOption#KEY_STORE_TYPE | Client.Builder#setSSLTrustStoreType | |
ClickHouseClientOption#TRUST_STORE | Client.Builder#setSSLTrustStore | |
ClickHouseClientOption#KEY_STORE_PASSWORD | Client.Builder#setSSLTrustStorePassword | |
ClickHouseClientOption#SSL_SOCKET_SNI | Client.Builder#sslSocketSNI | |
ClickHouseClientOption#CUSTOM_SOCKET_FACTORY | ✗ | |
ClickHouseClientOption#CUSTOM_SOCKET_FACTORY_OPTIONS | ✗ | SNI を設定するには Client.Builder#sslSocketSNI を参照 |
| V1 設定 | V2 Builder メソッド | コメント |
|---|---|---|
ClickHouseClientOption#SOCKET_TIMEOUT | Client.Builder#setSocketTimeout | |
ClickHouseClientOption#SOCKET_REUSEADDR | Client.Builder#setSocketReuseAddress | |
ClickHouseClientOption#SOCKET_KEEPALIVE | Client.Builder#setSocketKeepAlive | |
ClickHouseClientOption#SOCKET_LINGER | Client.Builder#setSocketLinger | |
ClickHouseClientOption#SOCKET_IP_TOS | ✗ | |
ClickHouseClientOption#SOCKET_TCP_NODELAY | Client.Builder#setSocketTcpNodelay | |
ClickHouseClientOption#SOCKET_RCVBUF | Client.Builder#setSocketRcvbuf | |
ClickHouseClientOption#SOCKET_SNDBUF | Client.Builder#setSocketSndbuf |
| V1 設定項目 | V2 Builder メソッド | コメント |
|---|---|---|
ClickHouseClientOption#COMPRESS | Client.Builder#compressServerResponse | useHttpCompression も参照 |
ClickHouseClientOption#DECOMPRESS | Client.Builder#compressClientRequest | useHttpCompression も参照 |
ClickHouseClientOption#COMPRESS_ALGORITHM | ✗ | 非 HTTP では LZ4 を使用。HTTP では Accept-Encoding を使用 |
ClickHouseClientOption#DECOMPRESS_ALGORITHM | ✗ | 非 HTTP では LZ4 を使用。HTTP では Content-Encoding を使用 |
ClickHouseClientOption#COMPRESS_LEVEL | ✗ | |
ClickHouseClientOption#DECOMPRESS_LEVEL | ✗ |
| V1 設定 | V2 ビルダーメソッド | コメント |
|---|---|---|
ClickHouseClientOption#PROXY_TYPE | Client.Builder#addProxy | |
ClickHouseClientOption#PROXY_HOST | Client.Builder#addProxy | |
ClickHouseClientOption#PROXY_PORT | Client.Builder#addProxy | |
ClickHouseClientOption#PROXY_USERNAME | Client.Builder#setProxyCredentials | |
ClickHouseClientOption#PROXY_PASSWORD | Client.Builder#setProxyCredentials |
| V1 の設定 | V2 ビルダー・メソッド | コメント |
|---|---|---|
ClickHouseClientOption#MAX_EXECUTION_TIME | Client.Builder#setExecutionTimeout | |
ClickHouseClientOption#RETRY | Client.Builder#setMaxRetries | retryOnFailures も参照 |
ClickHouseHttpOption#AHC_RETRY_ON_FAILURE | Client.Builder#retryOnFailures | |
ClickHouseClientOption#FAILOVER | ✗ | |
ClickHouseClientOption#REPEAT_ON_SESSION_LOCK | ✗ | |
ClickHouseClientOption#SESSION_ID | ✗ | |
ClickHouseClientOption#SESSION_CHECK | ✗ | |
ClickHouseClientOption#SESSION_TIMEOUT | ✗ |
| V1 設定 | V2 Builder メソッド | コメント |
|---|---|---|
ClickHouseDefaults#SERVER_TIME_ZONEClickHouseClientOption#SERVER_TIME_ZONE | Client.Builder#setServerTimeZone | |
ClickHouseClientOption#USE_SERVER_TIME_ZONE | Client.Builder#useServerTimeZone | |
ClickHouseClientOption#USE_SERVER_TIME_ZONE_FOR_DATES | ||
ClickHouseClientOption#USE_TIME_ZONE | Client.Builder#useTimeZone |
| V1 Configuration | V2 Builder Method | コメント |
|---|---|---|
ClickHouseClientOption#BUFFER_SIZE | Client.Builder#setClientNetworkBufferSize | |
ClickHouseClientOption#BUFFER_QUEUE_VARIATION | ✗ | |
ClickHouseClientOption#READ_BUFFER_SIZE | ✗ | |
ClickHouseClientOption#WRITE_BUFFER_SIZE | ✗ | |
ClickHouseClientOption#REQUEST_CHUNK_SIZE | ✗ | |
ClickHouseClientOption#REQUEST_BUFFERING | ✗ | |
ClickHouseClientOption#RESPONSE_BUFFERING | ✗ | |
ClickHouseClientOption#MAX_BUFFER_SIZE | ✗ | |
ClickHouseClientOption#MAX_QUEUED_BUFFERS | ✗ | |
ClickHouseClientOption#MAX_QUEUED_REQUESTS | ✗ | |
ClickHouseClientOption#REUSE_VALUE_WRAPPER | ✗ |
| V1 設定 | V2 Builder メソッド | コメント |
|---|---|---|
ClickHouseDefaults#ASYNCClickHouseClientOption#ASYNC | Client.Builder#useAsyncRequests | |
ClickHouseDefaults#MAX_SCHEDULER_THREADS | ✗ | setSharedOperationExecutor を参照 |
ClickHouseDefaults#MAX_THREADS | ✗ | setSharedOperationExecutor を参照 |
ClickHouseDefaults#THREAD_KEEPALIVE_TIMEOUT | setSharedOperationExecutor を参照 | |
ClickHouseClientOption#MAX_THREADS_PER_CLIENT | ✗ | |
ClickHouseClientOption#MAX_CORE_THREAD_TTL | ✗ |
| V1 の設定 | V2 Builder メソッド | コメント |
|---|---|---|
ClickHouseHttpOption#CUSTOM_HEADERS | Client.Builder#httpHeaders | |
ClickHouseHttpOption#CUSTOM_PARAMS | ✗ | Client.Builder#serverSetting を参照 |
ClickHouseClientOption#CLIENT_NAME | Client.Builder#setClientName | |
ClickHouseHttpOption#CONNECTION_PROVIDER | ✗ | |
ClickHouseHttpOption#DEFAULT_RESPONSE | ✗ | |
ClickHouseHttpOption#SEND_HTTP_CLIENT_ID | ✗ | |
ClickHouseHttpOption#AHC_VALIDATE_AFTER_INACTIVITY | ✗ | Apache HTTP Client 使用時は常に有効 |
| V1 設定 | V2 ビルダーメソッド | コメント |
|---|---|---|
ClickHouseDefaults#FORMATClickHouseClientOption#FORMAT | ✗ | 操作設定(QuerySettings および InsertSettings)に移動 |
ClickHouseClientOption#QUERY_ID | ✗ | QuerySettings および InsertSettings を参照 |
ClickHouseClientOption#LOG_LEADING_COMMENT | ✗ | QuerySettings#logComment および InsertSettings#logComment を参照 |
ClickHouseClientOption#MAX_RESULT_ROWS | ✗ | サーバー側の設定 |
ClickHouseClientOption#RESULT_OVERFLOW_MODE | ✗ | サーバー側の設定 |
ClickHouseHttpOption#RECEIVE_QUERY_PROGRESS | ✗ | サーバー側の設定 |
ClickHouseHttpOption#WAIT_END_OF_QUERY | ✗ | サーバー側の設定 |
ClickHouseHttpOption#REMEMBER_LAST_SET_ROLES | Client#setDBRoles | 現在はランタイム設定。QuerySettings#setDBRoles および InsertSettings#setDBRoles も参照 |
| V1 設定 | V2 ビルダー メソッド | コメント |
|---|---|---|
ClickHouseClientOption#AUTO_DISCOVERY | ✗ | |
ClickHouseClientOption#LOAD_BALANCING_POLICY | ✗ | |
ClickHouseClientOption#LOAD_BALANCING_TAGS | ✗ | |
ClickHouseClientOption#HEALTH_CHECK_INTERVAL | ✗ | |
ClickHouseClientOption#HEALTH_CHECK_METHOD | ✗ | |
ClickHouseClientOption#NODE_DISCOVERY_INTERVAL | ✗ | |
ClickHouseClientOption#NODE_DISCOVERY_LIMIT | ✗ | |
ClickHouseClientOption#NODE_CHECK_INTERVAL | ✗ | |
ClickHouseClientOption#NODE_GROUP_SIZE | ✗ | |
ClickHouseClientOption#CHECK_ALL_NODES | ✗ |
| V1 構成 | V2 Builder メソッド | コメント |
|---|---|---|
ClickHouseDefaults#AUTO_SESSION | ✗ | セッション対応は見直し予定です |
ClickHouseDefaults#BUFFERING | ✗ | |
ClickHouseDefaults#MAX_REQUESTS | ✗ | |
ClickHouseDefaults#ROUNDING_MODE | ||
ClickHouseDefaults#SERVER_VERSIONClickHouseClientOption#SERVER_VERSION | Client.Builder#setServerVersion | |
ClickHouseDefaults#SRV_RESOLVE | ✗ | |
ClickHouseClientOption#CUSTOM_SETTINGS | ||
ClickHouseClientOption#PRODUCT_NAME | ✗ | クライアント名を使用 |
ClickHouseClientOption#RENAME_RESPONSE_COLUMN | ✗ | |
ClickHouseClientOption#SERVER_REVISION | ✗ | |
ClickHouseClientOption#TRANSACTION_TIMEOUT | ✗ | |
ClickHouseClientOption#WIDEN_UNSIGNED_TYPES | ✗ | |
ClickHouseClientOption#USE_BINARY_STRING | ✗ | |
ClickHouseClientOption#USE_BLOCKING_QUEUE | ✗ | |
ClickHouseClientOption#USE_COMPILATION | ✗ | |
ClickHouseClientOption#USE_OBJECTS_IN_ARRAYS | ✗ | |
ClickHouseClientOption#MAX_MAPPER_CACHE | ✗ | |
ClickHouseClientOption#MEASURE_REQUEST_TIME | ✗ |
一般的な違い
- Client V2 は移植性を高めるために、プロプライエタリなクラスへの依存を減らしています。たとえば、V2 はサーバーにデータを書き込む際に、任意の
java.io.InputStreamの実装と連携して動作します。 - Client V2 の
async設定はデフォルトでoffです。これは追加のスレッドを起動せず、アプリケーションからクライアントをより細かく制御できることを意味します。この設定は、ほとんどのユースケースではoffのままにしておくことを推奨します。asyncを有効にすると、リクエストごとに専用のスレッドが作成されます。これは、アプリケーション側で制御される executor を使用する場合にのみ有用です(com.clickhouse.client.api.Client.Builder#setSharedOperationExecutorを参照)。
データの書き込み
- 任意の実装の
java.io.InputStreamを使用できます。V1 のcom.clickhouse.data.ClickHouseInputStreamもサポートされていますが、非推奨です。 - 入力ストリームの終端が検出されると、適切に処理されます。その前に、リクエストの出力ストリームをクローズしておく必要があります。
V1 TSV形式データの挿入。
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はデータへのアクセスを提供し、一部の変換処理を実装しています。