クエリ API エンドポイントのセットアップ
Query API Endpoints 機能を使用すると、ClickHouse Cloud コンソールで任意の保存済み SQL クエリから、直接 API エンドポイントを作成できます。ClickHouse Cloud サービスにネイティブ ドライバーで接続する必要なく、HTTP 経由で API エンドポイントにアクセスして保存済みクエリを実行できるようになります。
事前準備
先に進む前に、次の準備ができていることを確認してください:
- 適切な権限を持つ API キー
- Admin Console ロール
まだ持っていない場合は、このガイドに従って API キーを作成 できます。
API エンドポイントに対してクエリを実行するには、API キーに Member 組織ロールと Query Endpoints サービスアクセスが必要です。データベースロールはエンドポイント作成時に設定されます。
保存済みクエリを作成する
すでに保存済みクエリがある場合は、このステップをスキップできます。
新しいクエリタブを開きます。デモンストレーションのために、約 45 億件のレコードを含む youtube データセット を使用します。 Cloud サービス上にテーブルを作成し、データを挿入するには、「テーブルを作成」セクションの手順に従ってください。
LIMIT で制限するこのサンプルデータセットのチュートリアルでは大量のデータ (46.5 億行) を挿入するため、挿入に時間がかかる場合があります。
本ガイドの目的では、LIMIT 句を使用してより少量のデータを挿入することを推奨します。
例えば 1000 万行程度に制限してください。
サンプルクエリとして、ユーザー入力の year パラメータを用いて、動画あたりの平均再生回数が多いアップローダー上位 10 件を返します。
このクエリには、上記のスニペットでハイライトされているパラメータ (year) が含まれている点に注意してください。
パラメータは、中括弧 { } とパラメータの型を組み合わせて指定できます。
SQL コンソールのクエリエディタは ClickHouse のクエリパラメータ式を自動的に検出し、各パラメータに対応する入力欄を提供します。
クエリが動作することを確認するために、SQL エディタ右側のクエリ変数入力ボックスに 2010 年を指定して、このクエリを実行してみましょう:

次に、クエリを保存します:

保存済みクエリに関する詳細なドキュメントは、「クエリを保存する」セクションを参照してください。
クエリ API エンドポイントの設定
クエリビューから直接、Share ボタンをクリックし、API Endpoint を選択することで Query API エンドポイントを設定できます。
どの API キーがこのエンドポイントへアクセスできるかを指定するよう促されます:

API キーを選択した後、次の項目を指定します:
- クエリの実行に使用する Database ロール (
Full access、Read only、またはCreate a custom role) - クロスオリジンリソース共有 (CORS) で許可するドメイン
これらのオプションを選択すると、クエリ API エンドポイントが自動的にプロビジョニングされます。
テストリクエストを送信できるよう、curl コマンドの例が表示されます:

利便性のため、インターフェイスに表示される curl コマンドを以下に示します:
Query API パラメータ
クエリ内のクエリパラメータは {parameter_name: type} という構文で指定できます。これらのパラメータは自動的に検出され、サンプルリクエストのペイロードには、これらのパラメータを渡すための queryVariables オブジェクトが含まれます。
テストとモニタリング
Query API エンドポイントを作成したら、curl やその他の HTTP クライアントを使用して動作をテストできます:

最初のリクエストを送信すると、Share ボタンのすぐ右側に新しいボタンが表示されます。これをクリックすると、そのクエリに関するモニタリングデータを含むフライアウトが開きます:

実装の詳細
このエンドポイントは、保存済みの Query API エンドポイントに対してクエリを実行します。 複数バージョンへの対応、柔軟なレスポンス形式、パラメータ付きクエリ、およびオプションのストリーミングレスポンス(バージョン 2 のみ)をサポートします。
エンドポイント:
HTTP メソッド
| メソッド | ユースケース | パラメータ |
|---|---|---|
| GET | パラメータ付きのシンプルなクエリ | クエリ変数を URL パラメータ(?param_name=value)として渡す |
| POST | 複雑なクエリ、またはリクエストボディを使用する場合 | クエリ変数をリクエストボディ内の queryVariables オブジェクトとして渡す |
GET を使用する場合:
- 入れ子構造の複雑なデータを伴わないシンプルなクエリ
- パラメータを容易に URL エンコードできる場合
- HTTP GET のセマンティクスによるキャッシュの利点を得たい場合
POST を使用する場合:
- 配列、オブジェクト、大きな文字列などの複雑なクエリ変数がある場合
- セキュリティ/プライバシー上、リクエストボディで送信することが望ましい場合
- ストリーミングによるファイルアップロードや大容量データを送信する場合
認証
必須: はい
方式: OpenAPI キー/シークレットを使用した Basic 認証
権限: クエリエンドポイントに対して適切な権限
リクエスト設定
URL パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
queryEndpointId | はい | 実行するクエリエンドポイントの一意の識別子 |
クエリパラメータ
| Parameter | Required | Description | Example |
|---|---|---|---|
format | No | レスポンス形式(すべての ClickHouse フォーマットに対応) | ?format=JSONEachRow |
param_:name | No | リクエストボディがストリームの場合に使用するクエリ変数。:name を変数名に置き換えます | ?param_year=2024 |
request_timeout | No | クエリのタイムアウト(ミリ秒単位、デフォルト: 30000) | ?request_timeout=60000 |
:clickhouse_setting | No | サポートされている任意の ClickHouse 設定 | ?max_threads=8 |
ヘッダー
| ヘッダー | 必須 | 説明 | 値 |
|---|---|---|---|
x-clickhouse-endpoint-version | いいえ | エンドポイントのバージョンを指定します | 1 または 2(省略時は最後に保存されたバージョン) |
x-clickhouse-endpoint-upgrade | いいえ | エンドポイントのバージョンをアップグレードします(version ヘッダーと併用) | アップグレードする場合は 1 |
リクエストボディ
パラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
queryVariables | object | No | クエリで使用する変数 |
format | string | No | レスポンス形式 |
サポートされるフォーマット
| バージョン | サポートされるフォーマット |
|---|---|
| バージョン 2 | ClickHouse がサポートするすべてのフォーマット |
| バージョン 1(制限付き) | TabSeparated TabSeparatedWithNames TabSeparatedWithNamesAndTypes JSON JSONEachRow CSV CSVWithNames CSVWithNamesAndTypes |
レスポンス
成功
ステータス: 200 OK
クエリは正常に実行されました。
エラーコード
| ステータスコード | 説明 |
|---|---|
400 Bad Request | リクエストの形式が正しくありません |
401 Unauthorized | 認証情報がないか、権限が不足しています |
404 Not Found | 指定されたクエリエンドポイントが見つかりませんでした |
エラー処理のベストプラクティス
- リクエストに有効な認証情報が含まれていることを確認する
- 送信前に
queryEndpointIdとqueryVariablesを検証する - 適切なエラーメッセージを伴う、堅牢なエラー処理を実装する
エンドポイントバージョンのアップグレード
バージョン 1 からバージョン 2 にアップグレードするには、次のようにします。
x-clickhouse-endpoint-upgradeヘッダーを1に設定してリクエストに含めるx-clickhouse-endpoint-versionヘッダーを2に設定してリクエストに含める
これにより、バージョン 2 で提供される次の機能を利用できるようになります。
- すべての ClickHouse フォーマットのサポート
- レスポンスのストリーミング機能
- パフォーマンスおよび機能の強化
例
基本的なリクエスト
クエリ API エンドポイント用の SQL:
バージョン 1
- cURL
- JavaScript
バージョン 2
- GET (cURL)
- POST (cURL)
- JavaScript
JSONCompactEachRow フォーマットを使用し、クエリ変数とバージョン 2 を指定したリクエスト
クエリ API エンドポイントの SQL:
- GET(cURL)
- POST(cURL)
- JavaScript
クエリ変数に配列を含む、テーブルにデータを挿入するリクエスト
テーブル定義の SQL:
Query API エンドポイントの SQL:
- cURL
- JavaScript
ClickHouse の設定 max_threads を 8 にしたリクエスト
クエリ API エンドポイントの SQL:
- GET(cURL)
- POST(cURL)
- JavaScript
レスポンスをストリームとしてリクエストしてパースする`
クエリ API エンドポイントの SQL:
- TypeScript
ファイルからテーブルにストリーム挿入する
次の内容でファイル ./samples/my_first_table_2024-07-11.csv を作成します:
CREATE TABLE 文:
クエリ API エンドポイント用 SQL: