メインコンテンツへスキップ

クイックスタート

まずは簡単な例から始めましょう。ここでは ClickHouse に接続し、system データベースから SELECT を実行します。始めるには、接続情報が必要です。

接続情報

ClickHouse にネイティブ TCP で接続するには、次の情報が必要です。 ClickHouse Cloud サービスの接続情報は、ClickHouse Cloud コンソールで確認できます。 接続先のサービスを選択し、Connect をクリックします。 Native を選択すると、接続情報が clickhouse-client コマンドの例として表示されます。 セルフマネージド ClickHouse を使用している場合、接続情報は ClickHouse 管理者が設定します。

モジュールを初期化

サンプルコードをコピーする

このコードを clickhouse-golang-example ディレクトリに main.go としてコピーします。
main.go

go mod tidy を実行

接続情報を設定する

先ほど確認した接続情報を、main.goconnect() 関数に設定します。

例を実行する

さらに詳しく

このカテゴリの以降のドキュメントでは、ClickHouse Go client の詳細を説明します。

概要

ClickHouse は 2 つの公式 Go クライアントをサポートしています。これらのクライアントは相互補完的であり、それぞれ異なるユースケースに対応するよう意図的に設計されています。
  • clickhouse-go - Go 標準の database/sql インターフェイス、またはネイティブ ClickHouse API のいずれかをサポートする高水準クライアント。
  • ch-go - 低水準クライアント。ネイティブインターフェイスのみをサポートします。
clickhouse-go は高水準のインターフェイスを提供し、ユーザーは行指向のセマンティクスとバッチ処理を使用してデータのクエリや挿入を行えます。データ型に対する許容度が高く、精度の損失が生じる可能性がない限り、値は変換されます。一方、ch-go は最適化されたカラム指向のインターフェイスを提供し、型の厳密さやより複雑な利用方法が求められる代わりに、CPU とメモリのオーバーヘッドを低く抑えた高速なデータブロックのストリーミングを実現します。 バージョン 2.3 以降、clickhouse-go はエンコード、デコード、圧縮などの低水準機能に ch-go を利用しています。両クライアントは最適なパフォーマンスを実現するためにエンコードに Native format を使用しており、ネイティブ ClickHouse プロトコルで通信できます。clickhouse-go は、ユーザーがトラフィックをプロキシまたはロードバランスする必要がある場合に備えて、転送メカニズムとして HTTP もサポートしています。

接続方法は4通り

clickhouse-go では、どの API を使うかと どの転送方式 を使うかという、独立した 2 つの選択肢があります。これらの組み合わせで、接続モードは 4 通りになります。 API の選択: 最高のパフォーマンスとフル機能セット (進捗コールバック、列指向 insert、豊富な型サポート) が必要なら、ClickHouse API を選んでください。ORM や標準的な Go のデータベースインターフェイスを前提とするツールと連携する必要がある場合は、database/sql を選んでください。 転送方式の選択: TCP のほうが高速で、デフォルトでもあります。インフラストラクチャ上の要件で必要な場合は HTTP に切り替えてください。たとえば、HTTP ロードバランサーやプロキシ経由で接続する場合や、一時テーブルを使ったセッション、追加の圧縮アルゴリズム (gzip, deflate, br) など、HTTP 固有の機能が必要な場合です。 どちらの API でも、転送方式にかかわらずネイティブのバイナリ encoding を使用するため、HTTP でもシリアライゼーションのオーバーヘッドはありません。

クライアントの選択

クライアントライブラリの選定は、利用パターンと求めるパフォーマンスによって異なります。1 秒あたり数百万件の insert が必要な、insert 負荷の高いユースケースでは、低レベルクライアントの ch-go の使用を推奨します。このクライアントは、ClickHouse の Native format で必要となる、行指向フォーマットからカラムへのデータ変換に伴うオーバーヘッドを回避します。さらに、使いやすさを保つために、リフレクションや interface{} (any) 型も使用しません。 集計中心のクエリワークロードや、スループットがそれほど高くない insert ワークロードでは、clickhouse-go は使い慣れた database/sql インターフェイスと、より分かりやすい行ベースの扱いを提供します。さらに、転送プロトコルとして HTTP を任意で使用でき、ヘルパー関数を使って行と構造体を相互にマーシャリングできます。

インストール

ドライバーの v1 は非推奨であり、今後、機能更新や新しい ClickHouse 型のサポートは行われません。より高いパフォーマンスを備えた v2 への移行を推奨します。 クライアントの 2.x バージョンをインストールするには、go.mod ファイルにパッケージを追加します。 require github.com/ClickHouse/clickhouse-go/v2 main または、リポジトリをクローンします。
別のバージョンをインストールするには、必要に応じてパスまたはブランチ名を変更します。

バージョニング

このクライアントは、ClickHouseとは独立してリリースされています。2.x は現在開発中のメジャーバージョンです。2.x のすべてのバージョンは相互に互換性がある想定です。

ClickHouse 互換性

このクライアントは、以下をサポートしています。
  • こちらに記載されている、現在サポート対象の ClickHouse のすべてのバージョン。ClickHouse の各バージョンはサポート対象外になると、そのクライアントリリースに対するアクティブなテストも行われなくなります。
  • クライアントのリリース日からさかのぼって 2 年以内にリリースされた、すべてのバージョンの ClickHouse。なお、アクティブにテストされるのは LTS バージョンのみです。

Golangの互換性

ベストプラクティス

  • 可能であれば、特にプリミティブ型では ClickHouse API を利用してください。これにより、大量のリフレクションや間接処理を避けられます。
  • 大規模なデータセットを読み取る場合は、BlockBufferSize の変更を検討してください。これによりメモリ使用量は増えますが、行の反復処理中により多くのブロックを並列にデコードできるようになります。デフォルト値の 2 は控えめな設定で、メモリオーバーヘッドを最小限に抑えます。値を大きくすると、メモリ上に保持されるブロックも増えます。クエリによってブロックサイズは異なるため、テストが必要です。そのため、Context を介して クエリレベル で設定できます。
  • データを挿入する際は、型を明確に指定してください。クライアントは柔軟性を重視しており、たとえば UUID や IP に対して文字列を parse できるようになっていますが、そのためにはデータの検証が必要になり、挿入時のコストが発生します。
  • 可能であれば、カラム指向の挿入を使用してください。これらについても厳密に型を指定し、クライアント側で値を変換する必要がないようにしてください。
  • 最適な挿入パフォーマンスを得るために、ClickHouse の推奨事項に従ってください。

次のステップ

  • 設定 — 接続設定、TLS、認証、ログ、圧縮
  • ClickHouse API — クエリ実行とデータ挿入のためのネイティブなGo API
  • Database/SQL API — 標準のdatabase/sqlインターフェイス
  • データ型 — Goの型マッピングと複合型のサポート
最終更新日 2026年7月2日