メインコンテンツまでスキップ
メインコンテンツまでスキップ

Javaクライアントの概要

ClickHouseクライアント

Javaクライアントは、ClickHouseサーバーとのネットワーク通信の詳細を抽象化する独自のAPIを実装しているライブラリです。現在、HTTPインターフェースのみがサポートされています。このライブラリは、さまざまなClickHouse形式やその他の関連機能に対応するユーティリティを提供します。

Javaクライアントは、2015年に遡って開発されました。そのコードベースは非常に保守が難しく、APIは混乱を招き、さらなる最適化が困難です。そのため、2024年に新しいコンポーネント client-v2 にリファクタリングしました。これには明確なAPI、軽量なコードベース、そしてより多くのパフォーマンス改善と、より良いClickHouse形式サポート(主にRowBinaryおよびNative)が含まれています。JDBCは近い将来、このクライアントを使用します。

サポートされているデータタイプ

データタイプクライアント V2 サポートクライアント V1 サポート
Int8
Int16
Int32
Int64
Int128
Int256
UInt8
UInt16
UInt32
UInt64
UInt128
UInt256
Float32
Float64
Decimal
Decimal32
Decimal64
Decimal128
Decimal256
Bool
String
FixedString
Nullable
Date
Date32
DateTime
DateTime32
DateTime64
Interval
Enum
Enum8
Enum16
Array
Map
Nested
Tuple
UUID
IPv4
IPv6
Object
Point
Nothing
MultiPolygon
Ring
Polygon
SimpleAggregateFunction
AggregateFunction
Variant
Dynamic
JSON

ClickHouse データタイプ

注記
  • AggregateFunction - ⚠️ SELECT * FROM table ... はサポートされていません
  • Decimal - 一貫性のために、21.9+では SET output_format_decimal_trailing_zeros=1 を設定してください
  • Enum - 文字列および整数の両方として扱うことができます
  • UInt64 - client-v1 で long にマッピングされています

特徴

クライアントの機能の表:

名前クライアント V2クライアント V1コメント
HTTP 接続
HTTP 圧縮 (LZ4)
サーバー応答圧縮 - LZ4
クライアントリクエスト圧縮 - LZ4
HTTPS
クライアント SSL 証明書 (mTLS)
HTTP プロキシ
POJO SerDe
接続プールApache HTTP Client 使用時
名前付きパラメータ
失敗時のリトライ
フェイルオーバー
ロードバランシング
サーバー自動発見
ログコメント
セッションロール
SSL クライアント認証
セッションタイムゾーン

JDBCドライバは、基盤となるクライアント実装と同じ機能を継承します。その他のJDBC機能は、そのページに一覧されています。

互換性

  • このリポジトリ内のすべてのプロジェクトは、すべてのアクティブなLTSバージョンのClickHouseでテストされています。
  • サポートポリシー
  • セキュリティ修正や新しい改善を見逃さないために、クライアントを継続的にアップグレードすることをお勧めします
  • v2 APIへの移行の問題がある場合は、イシューを作成してください。対応いたします!

ロギング

私たちのJava言語クライアントは、SLF4Jをロギングに使用しています。 LogbackLog4j など、SLF4J互換のロギングフレームワークを使用できます。 例えば、Mavenを使用している場合、pom.xmlファイルに次の依存関係を追加することができます:

<dependencies>
    <!-- SLF4J API -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.16</version> <!-- Use the latest version -->
    </dependency>

    <!-- Logback Core -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.5.16</version> <!-- Use the latest version -->
    </dependency>

    <!-- Logback Classic (bridges SLF4J to Logback) -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.5.16</version> <!-- Use the latest version -->
    </dependency>
</dependencies>

ログの設定

これは、使用しているロギングフレームワークによって異なります。例えば、Logbackを使用している場合、logback.xmlというファイルでロギングを設定できます:

<configuration>
    <!-- Console Appender -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}] [%level] [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- File Appender -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/app.log</file>
        <append>true</append>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}] [%level] [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Root Logger -->
    <root level="info">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

    <!-- Custom Log Levels for Specific Packages -->
    <logger name="com.clickhouse" level="info" />
</configuration>

変更履歴