メインコンテンツへスキップ
標準 API の完全なコード例は こちら を参照してください。 接続設定については、Configuration を参照してください。 サポートされているデータ型と Go の型マッピングについては、Data Types を参照してください。 database/sql (または「標準」API) を使用すると、標準インターフェイスに準拠することで、アプリケーションコードを基盤となるデータベースに依存させたくないケースでもこのクライアントを利用できます。その代わりに、抽象化や間接化のレイヤーが増え、ClickHouse とは必ずしも整合しないプリミティブも含まれます。ただし、ツールが複数のデータベースに接続する必要がある場面では、こうしたコストは通常許容できます。 また、このクライアントはトランスポート層として HTTP もサポートしています。この場合でも、最適なパフォーマンスを得るためにデータはネイティブフォーマットでエンコードされます。

接続

接続は、clickhouse://<host>:<port>?<query_option>=<value> 形式の DSN 文字列と Open メソッドを使用する方法、または clickhouse.OpenDB メソッドを使用する方法のいずれかで確立できます。後者は database/sql の仕様には含まれていませんが、sql.DB インスタンスを返します。このメソッドでは profiling などの機能を利用できますが、これらを database/sql の仕様を通じて公開する明確な手段はありません。
完全な例 以降のすべての例では、特に明記がない限り、ClickHouse の conn 変数は作成済みで使用可能であるものとします。

接続設定

ほとんどの設定オプションは ClickHouse API と共通です。共通の設定については Configuration を参照してください。以下の SQL 固有の DSN パラメータを利用できます。
  • hosts - 負荷分散とフェイルオーバーのための、単一アドレスのホストをカンマ区切りで指定したリスト - 複数のノードへの接続 を参照してください。
  • username/password - 認証情報 - Authentication を参照してください
  • database - 現在のデフォルト database を選択します
  • dial_timeout - duration 文字列は、符号付きの場合もある 10 進数の数値を並べたもので、各値には必要に応じて小数部と、300ms1s のような単位の接尾辞を付けられます。有効な時間単位は mssm です。
  • connection_open_strategy - random/in_order (デフォルトは random) - 複数のノードへの接続 を参照してください
    • round_robin - 一連の server からラウンドロビンで選択します
    • in_order - 指定された順序で、最初に稼働中の server が選択されます
  • debug - デバッグ出力を有効にします (ブール値)
  • compress - 圧縮アルゴリズムを指定します - none (デフォルト) 、zstdlz4gzipdeflatebrtrue に設定すると lz4 が使用されます。ネイティブ通信でサポートされるのは lz4zstd のみです。
  • compress_level - 圧縮レベル (デフォルトは 0) です。圧縮 を参照してください。これはアルゴリズムごとに異なります。
    • gzip - -2 (最高速) から 9 (最高圧縮)
    • deflate - -2 (最高速) から 9 (最高圧縮)
    • br - 0 (最高速) から 11 (最高圧縮)
    • zstdlz4 - 無視されます
  • secure - セキュアな SSL 接続を確立します (デフォルトは false)
  • skip_verify - 証明書の検証をスキップします (デフォルトは false)
  • block_buffer_size - block バッファサイズを制御できます。BlockBufferSize を参照してください。 (デフォルトは 2)
完全なサンプル

HTTP 経由で接続する

デフォルトでは、接続はネイティブプロトコルで確立されます。HTTP が必要な場合は、DSN を変更して HTTP プロトコルを含めるか、接続オプションで Protocol を指定することで有効にできます。
完全なサンプル

セッション

HTTP のみセッションが必要なのは、HTTP トランスポートを使用する場合のみです。native TCP connection には、セッションが自動的に組み込まれています。
HTTP を使用する場合は、session_id を設定として渡すことで、一時テーブルなどのセッションに紐づく機能を有効にできます。
完全な例

実行

接続を確立したら、Execメソッドを使って sql ステートメントを実行できます。
完全な例 このメソッドはコンテキストを受け取れません。デフォルトではバックグラウンドコンテキストで実行されます。必要に応じて ExecContext を使用してください。詳しくは コンテキストの使用 を参照してください。

バッチ挿入

バッチ処理のセマンティクスは、Being メソッドで sql.Tx を作成することで実現できます。これを基に、INSERT ステートメントを指定して Prepare メソッドを使うと、バッチを取得できます。これにより sql.Stmt が返され、Exec メソッドを使ってそこに行を追加できます。元の sql.Tx に対して Commit が実行されるまで、バッチはメモリ上に蓄積されます。
完全な例

行をクエリする

単一の行をクエリするには、QueryRow メソッドを使用します。これは *sql.Row を返し、このオブジェクトに対して Scan を呼び出すことで、カラムの値を格納する変数へのポインタを渡せます。QueryRowContext バリアントを使うと、background 以外のコンテキストを渡せます。詳しくは コンテキストの使用 を参照してください。
完全な例 複数の行を反復処理するには、Query メソッドを使用します。これは *sql.Rows 構造体を返し、Next を呼び出して各行を順に処理できます。これに相当する QueryContext では、コンテキストを渡せます。
完全なサンプル

非同期 INSERT

非同期挿入は、ExecContext メソッドで INSERT を実行することで行えます。以下のように、非同期モードを有効にしたコンテキストを渡す必要があります。これにより、クライアントがサーバーでの INSERT 完了まで待機するか、データを受信した時点で応答するかをユーザーが指定できます。これは実質的に、パラメーター wait_for_async_insert を制御します。
サンプル全体

パラメータバインディング

標準 API は、ClickHouse API と同様のパラメータバインディング機能をサポートしており、ExecQueryQueryRow メソッド (およびそれらに対応する Context バリアント) にパラメータを渡せます。位置指定、名前付き、番号付きのパラメータをサポートしています。
完全な例 特別なケースに関する注意事項も引き続き適用されます。

コンテキストの使用

標準 API では、ClickHouse API と同様に、コンテキストを通じてデッドライン、キャンセルシグナル、そのほかのリクエストスコープの値を渡せます。ClickHouse API と異なり、これはメソッドの Context バリアントを使って実現します。つまり、デフォルトでバックグラウンドコンテキストを使用する Exec のようなメソッドには、先頭のパラメーターとしてコンテキストを渡せる ExecContext というバリアントがあります。これにより、アプリケーションフローのどの段階でもコンテキストを渡せます。たとえば、ConnContext を使って接続を確立するときや、QueryRowContext を使ってクエリの行を取得するときにコンテキストを渡せます。利用可能なすべてのメソッドの例を以下に示します。 コンテキストを使ってデッドライン、キャンセルシグナル、クエリ ID、クォータキー、接続設定を渡す方法の詳細については、ClickHouse API の コンテキストの使用 を参照してください。
完全なサンプル

動的スキャン

ClickHouse API と同様に、カラムの型情報を利用して、正しい型の変数の実行時インスタンスを作成し、それを Scan に渡すことができます。これにより、型が不明な場合でもカラムを読み取ることができます。
完全なサンプル

外部テーブル

外部テーブル を使用すると、クライアントは SELECT クエリとともに ClickHouse にデータを送信できます。このデータは一時テーブルに格納され、評価のためにクエリ内で使用できます。 クエリとともに外部データを送信するには、ユーザーは ext.NewTable を使用して外部テーブルを作成し、それを Context 経由で渡す前に構築する必要があります。
完全なサンプル

OpenTelemetry

ClickHouse は、TCP と HTTP の両方のトランスポートで trace context の伝播 をサポートしています。clickhouse.WithSpan を使用すると、context 経由でクエリに span を関連付けることができます。
HTTP トランスポートの制限ClickHouse server は標準の traceparent / tracestate HTTP ヘッダーを受け付けますが、clickhouse-go の HTTP トランスポートは現在これらを送信しないため、HTTP では WithSpan は効果がありません。回避策として、接続オプションの HttpHeaders でヘッダーを手動で設定できます。
完全なサンプル

圧縮

標準 API は、ネイティブの ClickHouse API と同じ圧縮アルゴリズム、つまりブロックレベルでの lz4 および zstd による圧縮をサポートしています。さらに、HTTP 接続では gzipdeflatebr による圧縮もサポートされています。これらのいずれかを有効にすると、挿入時およびクエリ応答時にブロック単位で圧縮が行われます。その他のリクエスト、たとえば ping やクエリリクエストは、非圧縮のままです。これは lz4 および zstd のオプションと同様の動作です。 接続の確立に OpenDB メソッドを使用する場合は、Compression 設定を渡せます。これには、圧縮レベルを指定する機能も含まれます (以下を参照) 。DSN を使用して sql.Open で接続する場合は、compress パラメータを使用します。これは、gzipdeflatebrzstdlz4 のいずれかの圧縮アルゴリズム、またはブールフラグを指定できます。true に設定した場合は、lz4 が使用されます。デフォルトは none、つまり圧縮は無効です。
完全な例
完全な例 適用する圧縮レベルは、DSN パラメータ compress&#95;level または Compression オプションの Level フィールドで指定できます。既定値は 0 ですが、アルゴリズムによって異なります。
  • gzip - -2 (最速) ~9 (最高圧縮)
  • deflate - -2 (最速) ~9 (最高圧縮)
  • br - 0 (最速) ~11 (最高圧縮)
  • zstd, lz4 - 無視されます
最終更新日 2026年7月2日