Skip to main content
任意パラメータが多いクライアントファクトリーやメソッドでは、引数をキーワードで渡してください。ここに記載していないメソッドは API の一部とは見なされず、削除または変更される可能性があります。

クライアントの初期化

同期 Client を作成するには clickhouse_connect.get_client を使用します。ネイティブの AsyncClient を作成するには、async エクストラをインストールし、clickhouse_connect.get_async_clientawait します。

接続引数

非同期ファクトリでは、aiohttp の接続プールを設定するために、connector_limit=100connector_limit_per_host=20keepalive_timeout=30.0 も指定できます。pool_mgr は指定できません。同期 chDB バックエンドでは pathchdb_options を指定できます。詳しくは 埋め込み chDB バックエンド を参照してください。

HTTPS/TLS 引数

settings 引数

最後に、get_clientsettings 引数は、各クライアントリクエストで追加の ClickHouse設定をサーバーに渡すために使用します。なお、ほとんどの場合、readonly=1 アクセスのユーザーはクエリとともに送信される設定を変更できないため、ClickHouse Connect はそのような設定を最終リクエストから除外し、警告をログに記録します。以下の設定は、ClickHouse Connect で使用される HTTP クエリ/セッションにのみ適用されるもので、一般的な ClickHouse設定としては文書化されていません。 各クエリとともに送信できるその他の ClickHouse設定については、ClickHouse ドキュメントを参照してください。

クライアント作成の例

  • パラメータを指定しない場合、ClickHouse Connect クライアントは localhost のデフォルトの HTTP ポートに、デフォルトユーザー default、パスワードなしで接続します:
  • セキュアな (HTTPS) 外部 ClickHouse サーバー への接続
  • セッション ID、その他のカスタム接続パラメータ、および ClickHouse 設定を使用した接続。

埋め込み chDB バックエンド

実験的なインプロセス chDB バックエンドを使用するには、clickhouse-connect[chdb] をインストールします。これにより、同期クライアントのクエリ、insert、streaming、Arrow の各メソッドを利用できます。
デフォルトはインメモリデータベースです。永続ストレージを使用するには、path="/data/my_chdb" を渡すか、dsn="chdb:///data/my_chdb" を使用します。バックエンドでは、プロセスごとに指定できる engine の path は 1 つだけで、get_async_client や external data には対応していません。

クライアントのライフサイクルとベストプラクティス

ClickHouse Connect クライアントの作成は、connection の確立、server メタデータの取得、設定の初期化を伴うため、負荷の高い処理です。最適なパフォーマンスを得るため、以下のベストプラクティスに従ってください。

基本原則

  • クライアントを再利用する: クライアントはアプリケーションの起動時に一度だけ作成し、その後はアプリケーションのライフサイクル全体を通して再利用します
  • 頻繁な作成を避ける: クエリやリクエストのたびに新しいクライアントを作成しないでください
  • 適切にクリーンアップする: シャットダウン時には、接続プールのリソースを解放するため、必ずクライアントを閉じてください
  • 可能なら共有する: 1 つのクライアントで、接続プールを通じて多数の同時実行クエリを処理できます (詳しくは下記のスレッドに関する注記を参照してください)

基本パターン

単一のクライアントを使い回す:
クライアントを何度も作成するのは避けてください:

マルチスレッドアプリケーション

セッションIDを使用する場合、クライアントインスタンスはスレッドセーフではありません。クライアントにはデフォルトで自動生成されたセッションIDが割り当てられており、同じセッション内でクエリを同時実行すると ProgrammingError が発生します。
クライアントを複数のスレッド間で安全に共有するには、次のようにします。
セッションの代替手段: セッション (例: 一時テーブルの利用) が必要な場合は、スレッドごとに別のクライアントを作成してください。

適切なクリーンアップ

シャットダウン時には、必ずクライアントを閉じてください。client.close() は、クライアントが自身のプールマネージャーを所有している場合にのみ (たとえば、カスタムの TLS/プロキシ オプションを指定して作成された場合) 、クライアントを破棄し、プールされた HTTP 接続を閉じます。デフォルトの共有プールを使用している場合は、ソケットを明示的に解放するために client.close_connections() を使用してください。そうしない場合、接続はアイドル期限切れ時およびプロセス終了時に自動的に回収されます。
または、コンテキストマネージャーを使用します:

複数のクライアントを使用する場面

複数のクライアントが適しているのは、次のような場合です。
  • 異なるサーバー: ClickHouse サーバーまたはクラスターごとに 1 つのクライアントを使用する
  • 異なる認証情報: ユーザーやアクセスレベルごとにクライアントを分ける
  • 異なるデータベース: 複数のデータベースを扱う必要がある場合
  • 分離されたセッション: 一時テーブルやセッション固有の設定のために、別々のセッションが必要な場合
  • スレッドごとの分離: スレッドごとに独立したセッションが必要な場合 (前述のとおり)

共通のメソッド引数

複数のクライアントメソッドでは、共通の parameters 引数または settings 引数、あるいはその両方を使用します。これらのキーワード引数については以下で説明します。

Parameters 引数

ClickHouse Connect クライアントの query* メソッドと command メソッドでは、Python の式を ClickHouse の値式にバインドするための、省略可能な parameters キーワード引数を指定できます。バインドには 2 種類あります。

サーバーサイドバインディング

ClickHouse は、クエリの値に対するサーバーサイドバインディングをサポートしています。バインドする値は、クエリとは別に HTTP パラメータとして送信されます。ClickHouse Connect は、{<name>:<datatype>} 形式の式を検出すると、このモードを使用します。値は Python の辞書として渡します。 null 許容値には Python の None を使用します。ネストされた None 値は、Array および Tuple パラメータ内、ならびに dict_parameter_format"map" に設定されている場合は Map リテラル内でサポートされます。
  • Python の辞書、DateTime 値、文字列値を使用したサーバーサイドバインディング
これは以下と同等です:
サーバーサイドバインディングは SELECT クエリでサポートされています。ALTERDELETEINSERT、その他の種類のステートメントでは使用できません。

クライアントサイドバインディング

ClickHouse Connect はクライアントサイドのパラメータバインディングにも対応しており、テンプレート化された SQL クエリをより柔軟に生成できます。クライアントサイドバインディングでは、parameters 引数には辞書またはシーケンスを指定する必要があります。クライアントサイドバインディングでは、パラメータの置換に Python の “printf” スタイル の文字列フォーマットを使用します。 サーバーサイドバインディングとは異なり、クライアントサイドバインディングは、データベース、テーブル、カラム名などのデータベース識別子には使用できない点に注意してください。Python スタイルのフォーマットでは文字列の種類の違いを区別できず、それぞれ異なる形式でフォーマットする必要があるためです (データベース識別子にはバッククォートまたは二重引用符、データ値には単一引用符を使用します) 。
  • Python の Dictionary、DateTime 値、文字列のエスケープを使用した Example
これにより、サーバーでは次のクエリが生成されます。
  • PythonのSequence (Tuple) 、Float64、IPv4Addressを使用した例
これにより、サーバーでは次のクエリが生成されます。
Datetime バインディングでは、naive 値を wall time として扱います。クライアントは naive datetime をそのままフォーマットします。ClickHouse は、まず {dt:DateTime('Europe/Berlin')} のようなサーバーサイドプレースホルダーで宣言されたタイムゾーン、次に設定されている場合は session_timezone、最後にサーバーのタイムゾーンを使用して解釈します。タイムゾーン対応の datetime は、プレースホルダーにタイムゾーンが指定されている場合はそのタイムゾーンに変換され、指定されていない場合は接続時に報告されたサーバーのタイムゾーンに変換されます。session_timezone 設定が報告されたサーバーのタイムゾーンと異なる場合は、タイムゾーン対応の値で意図した時点を維持するために、プレースホルダーでタイムゾーンを宣言してください。以前のホストローカル変換との一時的な互換性を確保するには、パラメータをバインドする前に common.set_setting("naive_datetime_binding", "legacy") を設定します。時点を保持するには、datetime 値をパラメータとして渡す前に、意図した tzinfo を付加してください。client.insert を介した挿入では、naive datetime 値はデフォルトでプロセスのローカルタイムゾーンで解釈されます。グローバルの naive_datetime_insert 設定を "server" にすると、カラムのタイムゾーンで wall time として解釈され、カラムにタイムゾーンがない場合はサーバーのタイムゾーンで解釈されます。Timezone-naive datetime objects を参照してください。サーバーサイドの {value:DateTime64(precision)} プレースホルダーでは、宣言された型によって、ArrayTuple のヒント内であっても秒未満の精度が自動的に保持されます。クライアントサイドの %s バインディングには宣言された型がありません。秒未満の精度で出力する必要がある場合は、datetimeDT64Param でラップしてください。
後方互換性のため、辞書パラメータ名が _64 で終わっている場合も、クエリ内にその接尾辞付きの完全一致の名前が存在しなければ、DateTime64 フォーマットが要求されます。datetime.time または datetime.timedelta パラメータは、両方のバインディングスタイルおよび ArrayTuple の値内で、ClickHouse の Time および Time64 カラム用に [-]HH:MM:SS[.ffffff] リテラルとしてフォーマットされます。クライアントが引用符を追加するため、クエリ内でプレースホルダーを引用符で囲まないでください。timedelta は負の値にすることができ、24 時間を超えることもできます。pandas の Timedelta はナノ秒を保持し、Time64(9) では 9 桁の小数部としてフォーマットされます。タイムゾーン対応の time のタイムゾーン情報は、ClickHouse の Time にはタイムゾーンがないため無視されます。

Settings 引数

主要な ClickHouse Connect Client の “insert” メソッドと “select” メソッドはすべて、含まれる SQL ステートメントに対して ClickHouse サーバー の ユーザー設定 を渡すための、省略可能な settings キーワード引数を受け付けます。settings 引数には辞書を指定する必要があります。各項目は、ClickHouse の設定名とそれに対応する値で構成されます。なお、値はサーバーにクエリパラメータとして送信される際に文字列に変換されます。 クライアントレベルの settings と同様に、ClickHouse Connect は、サーバーが readonly=1 としてマークした settings を、対応するログメッセージを出力したうえで除外します。ClickHouse HTTP インターフェイス 経由のクエリにのみ適用される settings は常に有効です。これらの settings については、get_client API で説明しています。 ClickHouse settings の使用例:

クライアント command メソッド

Client.command は、表形式のデータセットを返さない文や、単一のプリミティブ値または 1 行を返すクエリに使用します。レスポンスに応じて、文字列、整数、文字列のシーケンス、または QuerySummary を返します。空の結果セットを返す読み取りでは、空文字列が返されます。

コマンドの例

DDL文

単一の値を返すシンプルなクエリ

パラメータを指定するコマンド

設定付きのコマンド

Client query メソッド

Client.query は、ClickHouse Native フォーマットの表形式データセットを取得し、QueryResult を返します。結果全体は、結果のプロパティにアクセスした時点で実体化されます。メモリに保持したくない結果には、ストリーミングメソッドを使用してください。

クエリ例

基本的なクエリ

クエリ結果へのアクセス

クライアント側パラメータを使用するクエリ

サーバー側パラメータを使用したクエリ

設定を指定したクエリ

QueryResult オブジェクト

基本の query メソッドは、以下の公開プロパティを持つ QueryResult オブジェクトを返します。
  • result_rows — 行指向の結果マトリクス。
  • result_columns — カラム指向の結果マトリクス。
  • result_set — クエリの向きに応じて、result_rows または result_columns
  • column_names — 結果カラム名のタプル。
  • column_typesClickHouseType オブジェクトのタプル。
  • row_count — 実体化された結果行数。
  • query_id — リクエストに対して報告または生成されたクエリ ID。空文字列は、利用可能なものがなかったことを意味します。
  • summaryX-ClickHouse-Summary レスポンスヘッダーからデコードされた辞書。
  • first_item — 辞書として表した最初の行。結果が空の場合は None
  • first_row — シーケンスとして表した最初の行。結果が空の場合は None
  • column_block_streamrow_block_stream、および rows_stream — 内部ストリームコンテキストです。代わりに対応するクライアントのストリーミングメソッドを使用してください。
サポートされている StreamContext API については、ストリーミングクエリを参照してください。

NumPy、Pandas、Arrowでクエリ結果を処理する

ClickHouse Connect には、NumPy、Pandas、Arrow のデータフォーマット向けに特化したクエリメソッドが用意されています。これらのメソッドの使用方法の詳細 (例、ストリーミング機能、高度な型処理を含む) については、Advanced Querying (NumPy, Pandas and Arrow Queries) を参照してください。

クライアントのストリーミングクエリメソッド

大規模な結果セットをストリーミングするために、ClickHouse Connect には複数のストリーミングメソッドが用意されています。詳しくは、高度なクエリ (ストリーミングクエリ) をご覧ください。

クライアント insert メソッド

ClickHouse に複数のレコードを挿入する一般的なユースケースでは、Client.insert メソッドを使用します。このメソッドは次のパラメータを受け取ります。 このメソッドは QuerySummary を返します。その summary 辞書にはサーバーから報告された値が含まれます。written_rows は簡便なプロパティで、written_bytes()query_id() はそれぞれ対応する値を返します。挿入に失敗した場合は例外が発生します。 Pandas DataFrames、PyArrow Tables、Arrow バックエンドの DataFrames で動作する専用の挿入メソッドについては、高度な挿入 (Specialized Insert Methods) を参照してください。
A NumPy 配列は有効な Sequence of Sequences であり、メインの insert メソッドの data 引数として使用できるため、専用メソッドは必要ありません。

以下の例は、スキーマ (id UInt32, name String, age UInt8) を持つ既存のテーブル users があることを前提としています。

基本的な行指向 insert

カラム指向の insert

明示的なカラム型を指定した insert

特定のデータベースにinsert

ファイルからのinsert

ファイルから ClickHouse テーブルに直接データをinsertする方法については、高度な挿入 (ファイルからのinsert) を参照してください。

Raw API

型変換を行わずに ClickHouse HTTP インターフェイスへ直接アクセスする必要がある高度なユースケースについては、高度な使用方法 (Raw API) を参照してください。

Python DB-API 2.0

clickhouse_connect.dbapi モジュールは、PEP 249 で定義された接続およびカーソルのインターフェイスを実装しています。API レベル 2.0、threadsafety=2、および paramstyle="pyformat" を宣言しています。このモジュールは、PEP 249 の型コンストラクター DateTimeTimestamp、および Binary、ならびに DateFromTicksTimeFromTicks、および TimestampFromTicks 関数も提供します。
Cursor.executeCursor.executemany は、追加の settings および query_formats キーワード引数を受け付けます。settings は ClickHouse 設定を渡します。query_formats は、ステートメントが行を返す場合に、Client.query と同じマッピングを使用して、ClickHouse 型ごとに読み取りフォーマットを適用します。executemany は、実体化済みの行シーケンスを伴う互換性のある INSERT ... VALUES ステートメントに対して、ドライバーの Native 一括挿入パスを使用します。fetchonefetchmany、および fetchall は、現在の実体化済みの結果を消費します。 Cursor.description は、各結果カラムの型から null_ok を導出します。null 非許容型は False を返し、Nullable ラッパー、Variant、および Dynamic を含む null 許容型は True を返します。None は null 許容性が不明であることを意味します。先頭のコメントを無視して SELECT または WITH で始まるクエリが、行もカラムメタデータも返さない場合、カーソルは description を設定するために LIMIT 0 メタデータクエリを実行します。そのメタデータクエリが失敗した場合、description は空のままになります。 ClickHouse は、この HTTP インターフェイス経由では従来型のトランザクションを提供しません。Connection.commit()Connection.rollback() は no-op です。接続が共有される場合でも、セッション ID の同時実行ルール は引き続き適用されます。

ユーティリティクラスと関数

以下のモジュールは、クライアントアプリケーションで使用される追加の公開ヘルパーを提供します。 インストールされている package のバージョンは、文字列 clickhouse_connect.__version__ として公開されています。

Exceptions

DB-API 2.0 の例外階層を含むカスタム例外は、clickhouse_connect.driver.exceptions で定義されています。DatabaseErrorOperationalError では、ClickHouse のエラーコードを表す数値の code 属性と、UNKNOWN_TABLE のようなシンボリック名を表す name 属性が公開されているため、アプリケーションはメッセージをパースする代わりに exc.code に基づいて分岐できます。codeshow_clickhouse_errors が無効でも設定されますが、name を取得するにはエラーの詳細情報 (True または "scrub") が必要です。どちらも、トランスポートエラーなどで利用できない場合は None になります。エンドユーザーにホストやサーバーバージョンの情報を含めずに SQL エラーを表示する場合は、show_clickhouse_errors="scrub" を使用してください。この設定は、ストリーム途中の StreamFailureError メッセージおよび汎用トランスポートメッセージも制御します。制御対象は str(exc) のみです。トランスポートエラーは引き続き __cause__ として関連付けられ、トレースバックには元のホスト、URL、またはライブラリのエラーテキストが含まれる場合があります。

ClickHouse SQL ユーティリティ

clickhouse_connect.driver.binding モジュールの関数と DT64Param クラスを使用すると、ClickHouse SQL クエリを適切に構築し、エスケープできます。同様に、clickhouse_connect.driver.parser モジュールの関数を使用すると、ClickHouse のデータ型名をパースできます。

マルチスレッド、マルチプロセス、非同期/イベント駆動のユースケース

ClickHouse Connect をマルチスレッド、マルチプロセス、非同期/イベント駆動のアプリケーションで使用する場合の詳細については、高度な使用方法 (マルチスレッド、マルチプロセス、非同期/イベント駆動のユースケース) を参照してください。

AsyncClient

ネイティブな asyncio の使用方法については、高度な使用方法 (AsyncClient)を参照してください。

ClickHouse セッション ID の管理

マルチスレッドまたは同時実行のアプリケーションで ClickHouse セッション ID を管理する方法については、高度な使用方法 (ClickHouse セッション ID の管理) を参照してください。

HTTP接続プールのカスタマイズ

大規模なマルチスレッドアプリケーション向けにHTTP接続プールをカスタマイズする方法については、高度な使用方法 (HTTP接続プールのカスタマイズ) を参照してください。
最終更新日 2026年8月14日