Skip to main content
clickhouse-cpp は ClickHouse 向けの公式 C++クライアントライブラリで、ネイティブバイナリプロトコルを使用して ClickHouse への高速かつ型安全な インターフェイスを提供します。 ビルド手順、使用例、および追加ドキュメントは、プロジェクトの GitHub リポジトリで参照できます: https://github.com/ClickHouse/clickhouse-cpp.
このライブラリは現在も活発に開発が進められています。すでに ClickHouse の主要な機能はサポートしていますが、 一部の機能やデータ型は、まだ完全には実装またはサポートされていない場合があります。皆様からのフィードバックは非常に貴重であり、新機能や 改善の優先順位付けに役立ちます。制限事項、不足している機能、または予期しない動作に遭遇した場合は、 issue tracker からご意見や機能要望をお寄せください:  https://github.com/ClickHouse/clickhouse-cpp/issues

ライブラリをプロジェクトに組み込む

ライブラリをプロジェクトに組み込む最も簡単な方法は、CMake の FetchContent モジュールを使用することです。この方法では、ライブラリの特定のバージョンを固定し、通常の CMake ワークフローの一部としてビルドできます。
WITH_OPENSSL オプションを有効にすると、ライブラリで TLS をサポートできるようになり、 ClickHouse Cloud やその他の SSL 対応 ClickHouse デプロイメントに接続する際に必要です。TLS を使用しない 接続では省略できますが、通常は有効にしておくことを推奨します。 SSL サポートを有効にしてビルドするには、OpenSSL の開発用パッケージがインストールされている必要があります。Debian、 Ubuntu またはその派生ディストリビューションでは libssl-dev、Fedora や Red Hat では openssl-devel、macOS では Homebrew を使用して openssl をインストールしてください。 依存関係を利用可能にしたら、エクスポートされたライブラリターゲットに対して自分のターゲットをリンクしてください。

Client オブジェクトの設定

ClickHouse への接続を確立するには、Client インスタンスを作成します。次の例では、 パスワード不要かつ SSL が有効になっていないローカルの ClickHouse インスタンスに接続する方法を 示します。
より高度な構成では、追加の設定が必要です。次の例では、 いくつかの追加パラメータを使用して ClickHouse Cloud インスタンスに接続する方法を示します。

データを返さずにテーブルを作成し、クエリを実行する

テーブルの作成のように、データを返さないクエリを実行するには、Execute メソッドを使用します。 同じ方法は、ALTER TABLEDROP などの他のステートメントにも適用できます。

データの挿入

テーブルにデータを挿入するには、Block を作成し、テーブルスキーマに対応するカラムオブジェクトを格納します。 データはカラムごとに追加され、その後、効率的なバッチ書き込み向けに最適化された Insert メソッドを使用して、 1 回の操作で挿入されます。

データの取得

データを返すクエリを実行するには、Select メソッドを使用し、結果を処理するコールバックを指定します。クエリ結果は Block オブジェクトとして返され、ClickHouse ネイティブのカラム指向データ表現を反映しています。

サポートされているデータ型

  • UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64
  • UInt128, Int128
  • Decimal32, Decimal64, Decimal128
  • Float32, Float64
  • Date
  • DateTime, DateTime64
  • DateTime([timezone]), DateTime64(N, [timezone])
  • UUID
  • Enum8, Enum16
  • String
  • FixedString(N)
  • LowCardinality(String) および LowCardinality(FixedString(N))
  • Nullable(T)
  • Array(T)
  • Tuple
  • Map
  • IPv4, IPv6
  • Point, Ring, Polygon, MultiPolygon
最終更新日 2026年7月23日