clickhouse について
TypeScript と Node.js による ClickHouse 分析作業を支援するスキルです。公式クライアント資料を基に、クライアント利用、SQL、スキーマ、データ投入、運用、検証を案内します。
主な機能
- 01公式 TypeScript クライアントの案内
- 02SQL とスキーマ設計
- 03バッチ・非同期投入パターン
- 04クラウドとセルフホストの運用
- 05クエリと挿入の重点検証
活用シーン
- 01Node.js の ClickHouse 分析アプリ構築
- 02MergeTree テーブルとソートキーの設計
- 03JSONEachRow データのバッチ投入
- 04クエリ、ストリーム、マイグレーションの確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dobroslavradosavljevic/ skills --skill clickhouseインストール後、Claude Code で/clickhouseを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/client-ts.mdingest-query-patterns.mdsource-map.mdsql-engines-modeling.mdtesting-migrations.mdtypes-cloud-ops.mdusage-guide.md詳細
ClickHouse(TypeScript)
TypeScript/Node から ClickHouse の OLAP 作業を行う場合にこのスキルを使用します。対象には、公式 JS クライアント、アプリが実行する SQL、テーブル設計、データ取り込み、Cloud とセルフホストの比較、アプリからクエリできる運用情報が含まれます。
ワークフロー
- ローカル環境を確認します。
- パッケージ:
@clickhouse/client(Node)および/または@clickhouse/client-web(ブラウザー/Workers)。スナップショットは 1.23.1 です(1.24.0 はマージ済みですが未リリースです)。Node は>=20です。クライアントはサーバー 24.8+ に対応します。現在のサーバー系列は 26.9(安定版)と 26.8 / 26.3 LTS です。 - 接続:
url(Cloud は HTTPS:8443、ローカルは HTTP:8123)、認証(パスワードまたは Cloud JWTaccess_token)、database、TLS。 - スキーマ:エンジン(MergeTree ファミリー)、
ORDER BY、PARTITION BY、MV/プロジェクション。 - データ取り込み経路:
insert()によるバッチ処理とasync_insert、ストリーム、空配列の場合は何もしないこと。
- パッケージ:
- 日常的な使い方については、まず usage-guide.md に従います。
- バージョンに差がある場合はドキュメントを更新します。source-map.md から始めてください。
- 詳細は以下を参照してください。
- クライアント API、フォーマット、ストリーム、設定:client-ts.md。
- エンジン、キー、MV、プロジェクション、インデックス:sql-engines-modeling.md。
- INSERT/SELECT の SQL パターン、FINAL、JOIN、ミューテーション:ingest-query-patterns.md。
- 型、Cloud、システムテーブル、エラー:types-cloud-ops.md。
- Testcontainers と SQL マイグレーション:testing-migrations.md。
- スコープが未指定の
clickhouseコミュニティパッケージより、公式の@clickhouse/clientを優先します。ユーザー入力を SQL に直接埋め込んではいけません。{name: Type}とquery_paramsを使用してください。 query/insertの対象を絞ったスモークテスト、データ取り込み時のパーツ数への配慮、すべてのResultSetの消費/クローズによって検証します。
基本的な判断基準
- ClickHouse は 列指向 OLAP であり、OLTP ではありません。高 QPS のポイント検索ではなく、バッチ分析向けに最適化します。
- JS クライアントは HTTP(S) のみ(ネイティブ TCP 9000 ではありません)で通信します。
- デフォルトでは MergeTree と強力な
ORDER BYを使用します。パーティションはデータ管理(TTL/DROP)のためのものであり、ソートキーの代わりにはなりません。 insert({ format: 'JSONEachRow' })によるバッチ取り込みを優先します。小さな同期 INSERT はTOO_MANY_PARTSの原因になります。クライアント側でバッチ処理できない場合は、async_insert=1とwait_for_async_insert=1を使用します。- 特殊なエンジン(Replacing/Summing/Aggregating/Collapsing)では、正確性を保つ SQL(
FINALまたはマージを考慮した集計)が必要です。マージは最終的に反映されます。 - 何度も実行する
ALTER UPDATE/DELETEミューテーションより、挿入専用の設計、RMT、MV を優先します。行の削除には軽量なDELETE FROMを使用します。軽量なUPDATE … SET(ベータ版、パーツを修正)は、小規模(約 10% 未満)のバッチ修正に限って使用します。 - サーバー 26.9 以降では、新しいアナライザーが必須です(
enable_analyzerは廃止済み)。デフォルトの圧縮方式は ZSTD に変更されています。アップグレード時には、以前のクエリと固定している設定を再テストしてください。 - 型に関する注意点:JSON では UInt64 → string、Decimal は文字列、Date は
'YYYY-MM-DD'です。オブジェクト行では必ずformat: 'JSONEachRow'を設定します(INSERT のデフォルトは JSONCompactEachRow です)。 ResultSetは必ず 消費するかclose()してください。ストリームを閉じずに残すとECONNRESETが発生します。- プロセスごとに共有クライアントを 1 つ使用し、シャットダウン時に
close()/await usingを使用します。セッションを使用する場合はmax_open_connections: 1を設定します。 - Cloud:HTTPS
:8443、レプリケーションはマネージドです。アプリケーションレベルでDistributed(...)を使用せず、必要に応じてremoteSecureを使用します。 - コマンド例では
bun/bunxを優先します。
検証
意味のある ClickHouse の作業では、リポジトリで管理されているコマンドを優先し、関連する項目を確認してください。
bun pm ls @clickhouse/clientと Node ≥20。- スモークテスト:
ping({ select: true })、commandによる DDL、JSONEachRowを使ったinsertとquery。 - 取り込み:バッチサイズ/async_insert の設定。パーツが多すぎることを示すエラー 252 に注意してください。
- ストリーミング:最後まで読み取るか
close()を呼び出してください。挿入ストリームではバックプレッシャーに注意してください。 - Cloud:TLS URL、認証情報/JWT、キープアライブのアイドル TTL をサーバーのタイムアウトより短く設定します(クライアントのデフォルトは約 2500 ms)。
- スキーマ:
ORDER BYがフィルターパターンと一致していること。FINALまたはマージ集約を使った RMT/MV の正確性。 - テスト:インテグレーションテストがある場合は、
@testcontainers/clickhouseとgetClientOptions()を使用してください。
実行した確認項目と実行しなかった項目、残っているバージョン/Cloud に関する前提を報告してください。
コメント
Markdown 対応