クイックスタート
接続情報
ClickHouse Cloud サービスの接続情報は、ClickHouse Cloud コンソールで確認できます。
接続先のサービスを選択し、Connect をクリックします。
Native を選択すると、接続情報が
clickhouse-client コマンドの例として表示されます。
セルフマネージド ClickHouse を使用している場合、接続情報は ClickHouse 管理者が設定します。
モジュールを初期化
サンプルコードをコピーする
clickhouse-golang-example ディレクトリに main.go としてコピーします。
main.go
go mod tidy を実行
接続情報を設定する
main.go の connect() 関数に設定します。
例を実行する
さらに詳しく
概要
- clickhouse-go - Go 標準の
database/sqlインターフェイス、またはネイティブ ClickHouse API のいずれかをサポートする高水準クライアント。 - ch-go - 低水準クライアント。ネイティブインターフェイスのみをサポートします。
接続方法は4通り
API の選択: 最高のパフォーマンスとフル機能セット (進捗コールバック、列指向 insert、豊富な型サポート) が必要なら、ClickHouse API を選んでください。ORM や標準的な Go のデータベースインターフェイスを前提とするツールと連携する必要がある場合は、
database/sql を選んでください。
転送方式の選択: TCP のほうが高速で、デフォルトでもあります。インフラストラクチャ上の要件で必要な場合は HTTP に切り替えてください。たとえば、HTTP ロードバランサーやプロキシ経由で接続する場合や、一時テーブルを使ったセッション、追加の圧縮アルゴリズム (gzip, deflate, br) など、HTTP 固有の機能が必要な場合です。
どちらの API でも、転送方式にかかわらずネイティブのバイナリ encoding を使用するため、HTTP でもシリアライゼーションのオーバーヘッドはありません。
クライアントの選択
interface{} (any) 型も使用しません。
集計中心のクエリワークロードや、スループットがそれほど高くない insert ワークロードでは、clickhouse-go は使い慣れた database/sql インターフェイスと、より分かりやすい行ベースの扱いを提供します。さらに、転送プロトコルとして HTTP を任意で使用でき、ヘルパー関数を使って行と構造体を相互にマーシャリングできます。
インストール
require github.com/ClickHouse/clickhouse-go/v2 main
または、リポジトリをクローンします。
バージョニング
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の型マッピングと複合型のサポート