Java クライアント
DBサーバーとそのプロトコル経由で通信するための Java クライアントライブラリです。現在の実装では、HTTP インターフェイス のみをサポートしています。 このライブラリは、サーバーにリクエストを送信するための独自 API を提供します。また、さまざまなバイナリデータ形式(RowBinary* および Native*)を扱うためのツールも提供します。
セットアップ
- Maven Central(プロジェクトの Web ページ): https://mvnrepository.com/artifact/com.clickhouse/client-v2
- Nightlyビルド(リポジトリへのリンク): 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) で SSL 認証を有効にし、setClientCertificate(String) でクライアント証明書を、setClientKey(String) でクライアント鍵をそれぞれ設定する必要があります。
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 を参照してください。
クライアント設定
| 設定方法 | 引数 | 概要 |
|---|---|---|
addEndpoint(String endpoint) | * endpoint - URL 形式のサーバー アドレス。 | サーバーのエンドポイントを、利用可能なサーバーの一覧に追加します。現在はエンドポイントは 1 つのみサポートされています。 Default: none Enum: none Key: none |
addEndpoint(Protocol protocol, String host, int port, boolean secure) | - protocol - 接続プロトコル com.clickhouse.client.api.enums.Protocol#HTTP。- host - サーバーの IP またはホスト名。- secure - 通信にプロトコルのセキュア版 (HTTPS) を使用するかどうか。 | 利用可能なサーバー一覧にサーバーエンドポイントを追加します。現在、サポートされるエンドポイントは 1 つのみです。 デフォルト値: none 列挙値: none キー: none |
setOption(String key, String value) | * key - クライアント構成オプションの文字列キー。- value - オプションの文字列値。 | クライアントオプションの値をそのまま設定します。プロパティファイルから設定を読み込む場合に便利です。 |
setUsername(String username) | - username - 認証時に使用するユーザー名 | 後続の設定で選択される認証方式で使用するユーザー名を設定します デフォルト: default 列挙値: ClientConfigProperties.USER キー: user |
setPassword(String password) | * password - パスワード認証用のシークレット値 | パスワード認証に用いるシークレットを設定し、実質的にこの方式を認証メソッドとして選択します Default: - Enum: ClientConfigProperties.PASSWORD Key: password |
setAccessToken(String accessToken) | - accessToken - アクセストークンを表す文字列 | 認証に使用するアクセストークンを設定し、それに対応する認証方式を有効にします Default: - Enum: ClientConfigProperties.ACCESS_TOKEN Key: access_token |
useSSLAuthentication(boolean useSSLAuthentication) | * useSSLAuthentication - SSL 認証を使用するかどうかを示すフラグ | SSL クライアント証明書を認証方式として設定します。 デフォルト: - Enum: ClientConfigProperties.SSL_AUTH Key: ssl_authentication |
enableConnectionPool(boolean enable) | - enable - オプションを有効化するかどうかを示すフラグ | 接続プールを有効にするかどうかを設定します デフォルト: true 列挙型: ClientConfigProperties.CONNECTION_POOL_ENABLED キー: connection_pool_enabled |
setConnectTimeout(long timeout, ChronoUnit unit) | * timeout - 特定の時間単位で指定されたタイムアウト値。- unit - timeout に対する時間単位 | 任意のアウトバウンド接続に対する接続開始タイムアウトを設定します。これはソケット接続の確立を待機する時間に影響します。 デフォルト: - 列挙値: ClientConfigProperties.CONNECTION_TIMEOUT キー: connection_timeout |
setConnectionRequestTimeout(long timeout, ChronoUnit unit) | - timeout - タイムアウト値。- unit - timeout の時間単位 | 接続リクエストのタイムアウトを設定します。これは接続プールから接続を取得する場合にのみ有効です。 デフォルト値: 10000 列挙値: ClientConfigProperties.CONNECTION_REQUEST_TIMEOUT キー: connection_request_timeout |
setMaxConnections(int maxConnections) | * maxConnections - 最大接続数 | クライアントが各サーバーエンドポイントごとに確立できる最大同時接続数を設定します。 デフォルト: 10 列挙値: ClientConfigProperties.HTTP_MAX_OPEN_CONNECTIONS キー: max_open_connections |
setConnectionTTL(long timeout, ChronoUnit unit) | - timeout - ある時間単位で表したタイムアウト値。- unit - timeout の時間単位 | 接続の TTL を設定します。この時間を過ぎると接続は非アクティブと見なされます デフォルト: -1 Enum: ClientConfigProperties.CONNECTION_TTL Key: connection_ttl |
setKeepAliveTimeout(long timeout, ChronoUnit unit) | * timeout - ある時間単位で指定されたタイムアウト値。- unit - timeout の時間単位 | HTTP 接続における Keep-Alive のタイムアウトを設定します。タイムアウトを 0 に設定することで、Keep-Alive を無効化することができます。デフォルト: - 列挙型: ClientConfigProperties.HTTP_KEEP_ALIVE_TIMEOUT キー: http_keep_alive_timeout |
setConnectionReuseStrategy(ConnectionReuseStrategy strategy) | - strategy - enum com.clickhouse.client.api.ConnectionReuseStrategy の定数値 | 接続プールが使用する再利用戦略を選択します。LIFO を選択すると、接続がプールに返却されるとすぐに再利用されます。FIFO を選択すると、利用可能になった順番で接続を使用します(返却された接続は直ちには再利用されません)。 デフォルト: FIFO Enum: ClientConfigProperties.CONNECTION_REUSE_STRATEGY Key: connection_reuse_strategy |
setSocketTimeout(long timeout, ChronoUnit unit)` | *timeout- タイムアウト値。ある時間単位で指定します。- unit-timeoutの時間単位 | ソケットの読み取りおよび書き込み処理に影響するタイムアウトを設定します デフォルト: 0列挙型: ClientConfigProperties.SOCKET_OPERATION_TIMEOUTキー: socket_timeout |
setSocketRcvbuf(long size) | -size- サイズ(バイト単位) | TCP ソケットの受信バッファを設定します。このバッファは JVM が管理するメモリ領域の外側に確保されます。 デフォルト: 8196Enum: ClientConfigProperties.SOCKET_RCVBUF_OPTKey: socket_rcvbuf |
setSocketSndbuf(long size) | *size- バイト数 | TCP ソケットの受信バッファを設定します。このバッファは JVM メモリの外側に確保されます。 デフォルト: 8196Enum: ClientConfigProperties.SOCKET_SNDBUF_OPTKey: socket_sndbuf |
setSocketKeepAlive(boolean value) | -value- オプションを有効化するかどうかを示すフラグ。 | クライアントによって作成されるすべての TCP ソケットに対して、オプションSO_KEEPALIVEを設定します。TCP Keep-Alive は接続の生存状態を確認するメカニズムを有効にし、予期せず切断された接続を検出するのに役立ちます。 デフォルト: - Enum: ClientConfigProperties.SOCKET_KEEPALIVE_OPTKey: socket_keepalive |
setSocketTcpNodelay(boolean value) | *value- オプションを有効にするかどうかを示すフラグ。 | クライアントによって作成されるすべての TCP ソケットに対してオプションSO_NODELAYを設定します。この TCP オプションにより、ソケットは可能な限り早くデータを送信します。 デフォルト: - Enum: ClientConfigProperties.SOCKET_TCP_NO_DELAY_OPTKey: socket_tcp_nodelay |
setSocketLinger(int secondsToWait) | -secondsToWait- 待機する秒数。 | クライアントが作成するすべての TCP ソケットに対して linger 時間を設定します。 デフォルト: - Enum: ClientConfigProperties.SOCKET_LINGER_OPTKey: socket_linger |
compressServerResponse(boolean enabled) | *enabled- オプションを有効化するかどうかを示すフラグ | サーバーがレスポンスを圧縮するかどうかを設定します。 デフォルト: true列挙値: ClientConfigProperties.COMPRESS_SERVER_RESPONSEキー: compress |
compressClientRequest(boolean enabled) | -enabled- このオプションを有効化するかどうかを示すフラグ | クライアント側が送信リクエストを圧縮するかどうかを設定します。 デフォルト: falseEnum: ClientConfigProperties.COMPRESS_CLIENT_REQUESTKey: decompress |
useHttpCompression(boolean enabled) | *enabled- オプションを有効化するかどうかを示すフラグ | 対応するオプションが有効になっている場合に、クライアント/サーバー間の通信で HTTP 圧縮を使用するかどうかを設定します |
appCompressedData(boolean enabled) | -enabled- オプションを有効化するかどうかを示すフラグ | クライアントに、圧縮はアプリケーション側で処理されることを通知します。 デフォルト: falseEnum: ClientConfigProperties.APP_COMPRESSED_DATAKey: app_compressed_data |
setLZ4UncompressedBufferSize(int size) | *size- サイズ(バイト単位) | 非圧縮データストリームの一部を受信するバッファのサイズを設定します。バッファサイズが不足している場合は新しいバッファが作成され、その旨の警告がログに出力されます。 Default: 65536Enum: ClientConfigProperties.COMPRESSION_LZ4_UNCOMPRESSED_BUF_SIZEKey: compression.lz4.uncompressed_buffer_size |
disableNativeCompression | -disable - オプションを無効にするかどうかを示すフラグ | ネイティブ圧縮を無効にします。trueに設定すると、ネイティブ圧縮が無効になります。 デフォルト: falseEnum: ClientConfigProperties.DISABLE_NATIVE_COMPRESSIONKey: disable_native_compression |
setDefaultDatabase(String database) | *database- データベースの名前 | 既定のデータベースを設定します。 既定値: default列挙値: ClientConfigProperties.DATABASEキー: database |
addProxy(ProxyType type, String host, int port) | -type- プロキシの種類。- host- プロキシのホスト名または IP アドレス。- port- プロキシのポート。 | サーバーとの通信に使用するプロキシを設定します。プロキシで認証が必要な場合は、このプロキシ設定が必要です。 デフォルト: - 列挙型: ClientConfigProperties.PROXY_TYPEキー: proxy_typeデフォルト: - 列挙型: ClientConfigProperties.PROXY_HOSTキー: proxy_host デフォルト: - 列挙型: ClientConfigProperties.PROXY_PORTキー: proxy_port |
setProxyCredentials(String user, String pass) | *user- プロキシユーザー名。- pass- パスワード | プロキシでの認証に使用するユーザー資格情報を設定します。 Default: - Enum: ClientConfigProperties.PROXY_USERKey: proxy_userDefault: - Enum: ClientConfigProperties.PROXY_PASSWORDKey: proxy_password |
setExecutionTimeout(long timeout, ChronoUnit timeUnit) | -timeout- タイムアウト値。- timeUnit-timeoutの時間単位 | クエリの最大実行時間を設定します デフォルト: 0列挙型: ClientConfigProperties.MAX_EXECUTION_TIMEキー: max_execution_time |
setHttpCookiesEnabled(boolean enabled) | enabled- オプションを有効にするかどうかを示すフラグ | HTTP クッキーを保持し、サーバーに再送信するかどうかを設定します。 |
setSSLTrustStore(String path) | path- ローカル(クライアント側)システム上のファイルパス | サーバーホストの検証にクライアントが SSL トラストストアを使用するかどうかを設定します。 デフォルト: - 列挙値: ClientConfigProperties.SSL_TRUST_STOREキー: trust_store |
setSSLTrustStorePassword(String password) | password- シークレット値 | setSSLTrustStore(String path)で指定された SSL トラストストアのロック解除に使用するパスワードを設定します。デフォルト: - Enum: ClientConfigProperties.SSL_KEY_STORE_PASSWORDKey: key_store_password |
setSSLTrustStoreType(String type) | type- トラストストアの種類名 | setSSLTrustStore(String path)で指定されたトラストストアの型を設定します。デフォルト値: - 列挙型: ClientConfigProperties.SSL_KEYSTORE_TYPEキー: key_store_type |
setRootCertificate(String path) | path- ローカル(クライアント側)システム上のファイルのパス | クライアントがサーバーホストを検証するために指定したルート (CA) 証明書を使用するかどうかを設定します。 デフォルト: - 列挙型: ClientConfigProperties.CA_CERTIFICATEキー: sslrootcert |
setClientCertificate(String path) | path- ローカル(クライアント側)システム上のファイルパス | SSL 接続の確立時および SSL 認証で使用するクライアント証明書のパスを設定します。 デフォルト: - 列挙型: ClientConfigProperties.SSL_CERTIFICATEキー: sslcert |
setClientKey(String path) | path- ローカル(クライアント側)システム上のファイルのパス | サーバーとの SSL 通信を暗号化するために使用するクライアントの秘密鍵を設定します。 デフォルト値: - Enum: ClientConfigProperties.SSL_KEYKey: ssl_key |
useServerTimeZone(boolean useServerTimeZone) | useServerTimeZone- この設定を有効にするかどうかを示すフラグ | クライアントが DateTime および Date 列の値をデコードする際にサーバーのタイムゾーンを使用するかどうかを指定します。有効にした場合、サーバーのタイムゾーンはsetServerTimeZone(String timeZone)で設定する必要があります。デフォルト: trueEnum: ClientConfigProperties.USE_SERVER_TIMEZONEKey: use_server_time_zone |
useTimeZone(String timeZone) | timeZone - Java で有効なタイムゾーン ID を表す文字列値(java.time.ZoneIdを参照) | 指定したタイムゾーンを、DateTime および Date 列の値をデコードする際に使用するかどうかを設定します。サーバー側のタイムゾーン設定を上書きします。 デフォルト: - Enum: ClientConfigProperties.USE_TIMEZONEKey: use_time_zone |
setServerTimeZone(String timeZone) | timeZone - Java の有効なタイムゾーン ID を表す文字列値(java.time.ZoneIdを参照) | サーバー側のタイムゾーンを設定します。デフォルトでは UTC タイムゾーンが使用されます。 デフォルト: UTC列挙: ClientConfigProperties.SERVER_TIMEZONEキー: server_time_zone |
useAsyncRequests(boolean async) | async- オプションを有効化するかどうかを示すフラグ。 | クライアントがリクエストを別スレッドで実行するかどうかを設定します。アプリケーション側の方がマルチスレッド処理の設計を適切に行えること、またタスクを別スレッドで実行してもパフォーマンス向上には寄与しないことから、デフォルトでは無効になっています。 デフォルト: falseEnum: ClientConfigProperties.ASYNC_OPERATIONSKey: async |
setSharedOperationExecutor(ExecutorService executorService) | executorService- ExecutorService のインスタンス。 | 操作タスク用のexecutor serviceを設定します。 デフォルト: noneEnum: noneKey: none |
setClientNetworkBufferSize(int size) | *size- バイト数 | ソケットとアプリケーション間でデータを往復コピーするために使用される、アプリケーションメモリ空間内のバッファのサイズを設定します。値を大きくすると TCP スタックへのシステムコールは減少しますが、接続ごとに消費されるメモリ量に影響します。接続が短時間で終了するため、このバッファも GC(ガーベジコレクション)の対象になります。また、連続した大きなメモリブロックの割り当てが問題になる可能性がある点にも注意してください。 Default: 300000Enum: ClientConfigProperties.CLIENT_NETWORK_BUFFER_SIZEKey: client_network_buffer_size |
retryOnFailures(ClientFaultCause ...causes) | -causes-com.clickhouse.client.api.ClientFaultCauseの列挙型定数 | 再試行対象とする障害タイプを設定します。 既定値: NoHttpResponse,ConnectTimeout,ConnectionRequestTimeout列挙定数: ClientConfigProperties.CLIENT_RETRY_ON_FAILUREキー: client_retry_on_failures |
setMaxRetries(int maxRetries) | *maxRetries- 再試行回数 | retryOnFailures(ClientFaultCause ...causes)で定義された失敗に対する最大再試行回数を設定します デフォルト: 3列挙型: ClientConfigProperties.RETRY_ON_FAILUREキー: retry |
allowBinaryReaderToReuseBuffers(boolean reuse) | -reuse- このオプションを有効にするかどうかを示すフラグ | ほとんどのデータセットには、小さなバイト列としてエンコードされた数値データが含まれます。デフォルトでは、リーダーは必要なバッファーを割り当て、その中にデータを読み込み、その後ターゲットのNumberクラスへ変換します。これは、多数の小さなオブジェクトが割り当ておよび解放されるため、GC に大きな負荷をかける可能性があります。このオプションを有効にすると、リーダーは事前に割り当てられたバッファーを使用して数値のトランスコードを行います。各リーダーは独自のバッファーセットを持ち、かつ各リーダーは単一スレッドからのみ使用されるため、安全に利用できます。 |
httpHeader(String key, String value) | *key- HTTP ヘッダーのキー。- value- ヘッダー値の文字列。 | 単一の HTTP ヘッダーに値を設定します。既存の値は上書きされます。 Default: noneEnum: noneKey: none |
httpHeader(String key, Collection values) | -key- HTTP ヘッダーキー。- values- 文字列の値のリスト。 | 1 つの HTTP ヘッダーの値を設定します。既存の値は上書きされます。 デフォルト: none列挙型: noneキー: none |
httpHeaders(Map headers) | *header- HTTP ヘッダーとその値のマップ。 | 複数の HTTP ヘッダー値をまとめて設定します。 Default: noneEnum: noneKey: none |
serverSetting(String name, String value) | -name- クエリレベルの設定名。- value- 設定値(文字列)。 | 各クエリとともにサーバーに渡す設定を指定します。個々の操作で設定された値によって上書きされる場合があります。設定の一覧 Default: noneEnum: noneKey: none |
serverSetting(String name, Collection values) | *name- クエリレベル設定の名前。- values- 設定の文字列値。 | 各クエリに対してサーバーへ渡す設定を指定します。個々の操作ごとの設定によって上書きされる場合があります。設定の一覧は List of settings を参照してください。このメソッドは、たとえば roles のように複数の値を持つ設定を指定する場合に便利です。 Default: noneEnum: noneKey: none |
columnToMethodMatchingStrategy(ColumnToMethodMatchingStrategy strategy) | -strategy- カラムとフィールドの対応付け戦略の実装 | DTO を登録する際に、DTO クラスのフィールドと DB カラムのマッピングに使用するカスタム戦略を設定します。 デフォルト: none列挙: noneキー: none |
useHTTPBasicAuth(boolean useBasicAuth) | *useBasicAuth- オプションを有効化するかどうかを示すフラグ | ユーザー名とパスワードによる認証に Basic HTTP 認証を使用するかどうかを設定します。デフォルトでは有効です。この認証方式を使用すると、HTTP ヘッダー経由では正しく送信できない特殊文字を含むパスワードに関する問題を解消できます。 Default: trueEnum: ClientConfigProperties.HTTP_USE_BASIC_AUTHKey: http_use_basic_auth |
setClientName(String clientName) | -clientName - アプリケーション名を表す文字列 | 呼び出し元アプリケーションに関する追加情報を設定します。この文字列はクライアント名としてサーバーに渡されます。HTTP プロトコルを使用する場合は、User-Agentヘッダーとして送信されます。 デフォルト: - 列挙型: ClientConfigProperties.CLIENT_NAMEキー: client_name |
useBearerTokenAuth(String bearerToken) | *bearerToken- エンコード済みのベアラートークン | Bearer 認証を使用するかどうかと、使用するトークンを指定します。トークンはそのまま送信されるため、このメソッドに渡す前にエンコードしておく必要があります。 デフォルト: - Enum: ClientConfigProperties.BEARERTOKEN_AUTHKey: bearer_token |
registerClientMetrics(Object registry, String name) | -registry- Micrometer のレジストリインスタンス- name- メトリクスグループの名前 | Micrometer (https://micrometer.io/) のレジストリインスタンスにセンサーを登録します。 |
setServerVersion(String version) | *version- サーバーのバージョンを表す文字列値 | バージョン検出を行わせないためにサーバーのバージョンを設定します。 デフォルト: - 列挙型: ClientConfigProperties.SERVER_VERSIONキー: server_version |
typeHintMapping(Map typeHintMapping) | -typeHintMapping- 型ヒントのマッピング | ClickHouse の型に対する型ヒントのマッピングを設定します。たとえば、多次元配列を独自の Array オブジェクトではなく、Java のコンテナー型として表現できるようにします。 デフォルト: - Enum: ClientConfigProperties.TYPE_HINT_MAPPINGKey: type_hint_mapping |
sslSocketSNI(String sni) | *sni- サーバー名を表す文字列値 | SSL/TLS 接続において SNI(Server Name Indication)として使用するサーバー名を設定します。 デフォルト: - Enum: ClientConfigProperties.SSL_SOCKET_SNIキー: ssl_socket_sni |
サーバー設定
サーバー側の設定は、作成時にクライアントレベルで一度だけ設定できます(Builder の serverSetting メソッドを参照)。また、各オペレーションのレベルでも設定できます(オペレーション設定クラスの serverSetting を参照)。
setOption メソッド(Client.Builder またはオペレーション設定クラスのいずれか)を通じてオプションを設定する場合、サーバー設定の名前には clickhouse_setting_ を接頭辞として付ける必要があります。この場合は com.clickhouse.client.api.ClientConfigProperties#serverSetting() を利用すると便利です。
カスタム HTTP ヘッダー
カスタム HTTP ヘッダーは、すべての操作(クライアントレベル)または特定の 1 つの操作(オペレーションレベル)に対して設定できます。
オプションを setOption メソッド(Client.Builder またはオペレーション設定クラス)で指定する場合は、カスタムヘッダー名の先頭に http_header_ を付ける必要があります。この場合は、com.clickhouse.client.api.ClientConfigProperties#httpHeader() メソッドが役立ちます。
共通定義
ClickHouseFormat
サポートされているフォーマット の列挙型です。ClickHouse がサポートするすべてのフォーマットが含まれます。
raw- ユーザーが生データを自分でトランスコードする必要があるfull- クライアント側でデータをトランスコードでき、生データストリームを受け入れられる-- このフォーマットでは ClickHouse が操作をサポートしていないことを示す
このクライアントバージョンでサポートされる内容:
Insert API(挿入 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 - 操作結果およびサーバー側メトリクスなどの追加情報。
例
insert(String tableName, DataStreamWriter writer, ClickHouseFormat format, InsertSettings settings)
ベータ版
この API メソッドでは、データを出力ストリームに直接エンコードする writer オブジェクトを渡すことができます。データはクライアント側で圧縮されます。
InsertSettings には appCompressedData という設定オプションがあり、クライアント側での圧縮を無効にして、アプリケーション側から圧縮済みストリームを送信できるようにします。
以下の例は、この API が想定している主なユースケースを示しています。
com.clickhouse.client.api.DataStreamWriter は、出力ストリームがデータを書き込み可能な状態になったタイミングでクライアントによって呼び出される onOutput メソッドを持つ関数型インターフェイスです。このインターフェイスには、デフォルト実装を持つ onRetry という別のメソッドもあります。このメソッドはリトライ処理がトリガーされた際に呼び出され、主に必要に応じてデータソースをリセットするために使用されます。
シグネチャ
パラメータ
tableName - 挿入先テーブルの名前。
writer - データライターのインスタンス。
format - writer がデータをエンコードする際のデータ形式。
settings - リクエストの設定。
戻り値
InsertResponse 型の Future - 操作結果およびサーバー側メトリクスなどの追加情報。
例
文字列値としてエンコードされた JSON オブジェクトのコレクションを、JSONEachRow 形式で書き込む場合:
既に圧縮済みのデータの書き込み:
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) | 操作ごとに複数値を持つ個別のサーバー設定を行います。コレクション内の要素は String 値である必要があります。 |
setDBRoles(Collection dbRoles) | 操作を実行する前に設定する DB ロールを指定します。コレクション内の要素は String 値である必要があります。 |
setOption(String option, Object value) | 構成オプションを生の形式で設定します。これはサーバー設定ではありません。 |
InsertResponse
挿入操作の結果を保持するレスポンスオブジェクトです。これはクライアントがサーバーからレスポンスを受信した場合にのみ使用できます。
このオブジェクトは、できるだけ早くクローズして接続を解放する必要があります。前のレスポンスのすべてのデータが完全に読み込まれるまで、その接続は再利用できないためです。
| Method | Description |
|---|---|
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
クエリ操作向けの設定オプション。
設定方法
| Method | Description |
|---|---|
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
クエリ実行の結果を保持するレスポンスオブジェクトです。クライアントがサーバーからレスポンスを受信できた場合にのみ利用可能です。
このオブジェクトは、接続を解放するためにできるだけ早くクローズする必要があります。前のレスポンスのすべてのデータが完全に読み込まれるまで、その接続は再利用できないためです。
| Method | Description |
|---|---|
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 で指定したクエリに対応する列を持つ 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) アプリケーションでクライアントを使用する方法を示すサンプル。