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 | ✔ | ✗ |
注記
- 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をロギングに使用しています。 Logback や Log4j など、SLF4J互換のロギングフレームワークを使用できます。
例えば、Mavenを使用している場合、pom.xmlファイルに次の依存関係を追加することができます:
ログの設定
これは、使用しているロギングフレームワークによって異なります。例えば、Logbackを使用している場合、logback.xmlというファイルでロギングを設定できます: