clickhousectl) は、ClickHouse Cloud リソースの管理や、ClickHouse を使ったローカル開発を一元的に行えるコマンドラインツールです。ClickHouse Cloud Postgres サービスや ClickPipes の管理にも対応しています。
このページは clickhousectl 0.4.2 のコマンド体系に関するリファレンスです。インストール済みのバージョンを確認するには clickhousectl --version を実行し、各コマンドのフラグの一覧を確認するには clickhousectl <command> --help を実行してください。
インストール
chctl のエイリアスも自動的に作成されます。
既存のインストールを最新バージョンに更新するには:
Cloud 管理
ClickHouse Cloud にログインし、コマンドラインから直接サービスを管理します。認証
.clickhouse/credentials.json (プロジェクトローカル、gitの管理対象外) に保存されます。環境変数を使用することもできます:
--api-key/--api-secret フラグ、.clickhouse/credentials.json 内のプロジェクト認証情報、環境変数 (シェル、次に .env) 、cloud auth login で取得した OAuth トークン。
OAuth トークンは読み取り専用です。書き込み系のコマンド (create、delete、start、stop、update、scale) には API キーによる認証が必要です。
サービス
Running queries
Query API を使用して HTTP 経由で Cloud サービスに対して SQL を実行します。ローカルのclickhouse binary やサービスの password は必要ありません。--id または --name のいずれか一方を必ず指定してください:
.clickhouse/credentials.json に保存されます。プロビジョニングせずにエラーとしたい場合は --no-auto-enable を指定してください。OAuth の場合、SQL はクラウドユーザーとして読み取り専用権限 (SELECT のみ) で実行され、プロビジョニングは行われません。
知っておくべき事項:
service queryは 1 リクエストにつき 1 つのステートメントを実行します。複数ステートメントの SQL は、--query、--queries-file、stdin のいずれの経路で渡された場合でも Query API に拒否され、Error: SQL error 62: Syntax error (Multi-statements are not allowed)となります。単一ステートメントの末尾に;が付いていても問題ありません。スクリプトで実行する場合は、clickhousectl local use latestを実行し、サービスに対してclickhouse clientを使用してください。--queryと--queries-fileは排他的です (終了コード 2) 。どちらも指定されていない場合にのみ stdin が読み取られます。--queryは stdin を読み取らないため、これと併せてデータをリダイレクトまたはパイプすると、黙って無視される (no-op) のではなく明確なエラーになります:Error: --query cannot be combined with SQL or data on stdin.代わりにINSERTとそのデータを単一ストリームとして送信してください —printf 'INSERT INTO t FORMAT CSV\n' | cat - data.csv | clickhousectl cloud service query --id <service-id>— もしくは--queries-file -で stdin からステートメント全体を読み取ってください。- デフォルトの出力フォーマットは、端末では
PrettyCompact、パイプされた場合はTabSeparatedです。--jsonを指定するとJSONEachRowが選択され、--formatと併用できません (終了コード 2) 。 - 保存済みの Query API キーが endpoint に HTTP 401/403 で拒否されても、自動的に置き換えられることはありません。CLI は、その理由を報告するためだけにキーの management レコードを読み取ります。この認証情報のみを置き換えるには
clickhousectl cloud service repair-query-key <service-id>を実行してください。このコマンドは置き換え前のキーも削除します。稼働中のサービスでは、新しいキーによる probe クエリが成功した場合にのみ終了コード 0 で終了し、その結果は--json出力のverificationに報告されます。readiness の待機期間が終了しても Query API がキーを拒否し続ける場合、コマンドは終了コード 1 で終了しますが、修復自体は有効です。再実行せず、代わりにcloud service queryを実行してください。 - Query API は約 30 秒でタイムアウトします。ステートメントはサービス上で実行され続けますが、結果は失われます。それより長時間かかる処理では、
clickhousectl local use latestを実行して標準のclickhousebinary をPATHに配置し、clickhouse client --host <host> --secure --port 9440 --user default --password <password>で接続してください。
サービスエンドポイントと設定
--backup-start-time はちょうど正時 (HH:00) でなければならず、API 呼び出しの前に CLI によって検証されます。また、バックアップ間隔が 24 または 48 時間である必要があります。同じコマンド内で --backup-period-hours 24 または --backup-period-hours 48 を指定するか、いずれかがすでに保存済みである必要があります。それ以外の間隔が保存されている場合、CLI は API を呼び出す前に処理を拒否し、Error: the stored backup period is 12 hours, but --backup-start-time requires 24 or 48. を返します。
--clear-backup-start-time は保存された開始時刻を削除し、この制限を解除します。--backup-period-hours と組み合わせれば、開始時刻の消去と任意の間隔の設定を 1 回の呼び出しで行えます。このオプションは --backup-start-time と競合します。
バックアップ
clickhousectl cloud service create --name restored-service --backup-id <backup-id>。
ClickPipes
Cloud サービスへデータを取り込むための ClickPipes を管理します。ほとんどのコマンドは、第一引数としてサービス ID を受け取ります。clickpipe create postgresでは、--table-mapping <schema.table:target_table>(繰り返し指定可能、1 フラグにつき 1 テーブル) または--table-mapping-json <json>のいずれかが必要です。両者を併用することもできます。JSON 形式は API のテーブルマッピングオブジェクトをそのまま受け取るもので、excludedColumns、sortingKeys、partitionByExpr、partitionKey、tableEngineを設定できる唯一の手段です。なお、partitionKeyは並列度を高めるために初期スナップショットを分割するものであり、宛先テーブルのPARTITION BY(こちらはpartitionByExpr) とは無関係です。--iam-roleは--auth IAM_ROLEと併用する場合に必須で、基本認証と併用した場合は拒否されます。また--replication-slot-nameは--replication-mode cdc_onlyの場合にのみ有効です。- Postgres の CDC (変更データキャプチャ) 設定はパイプの作成時に適用されます:
--sync-interval-seconds、--pull-batch-size、--initial-load-parallelism、--snapshot-rows-per-partition、--snapshot-parallel-tables、--allow-nullable-columns、--enable-failover-slots、--delete-on-merge。後から変更できるのは同期間隔と Pull バッチサイズのみで、スナップショットおよび初期ロードの設定は変更できません。 clickpipe createのいずれのサブコマンドでも、--role <role>は繰り返し指定可能で、パイプの宛先ユーザーに付与する ClickHouse ロールを選択します。これは、そのユーザーが本来受け取るロールを置き換えるものです。--roleを指定しない場合、ユーザーはclickpipes_systemとdefault_roleを保持し、--role my_roleを指定した場合はclickpipes_systemとmy_roleを保持します。このロールは宛先データベースにテーブルを作成できる必要があり、閲覧のみのロールでは作成がNot enough privilegesで失敗します。API の予約名であるclickpipesおよびclickpipes_systemは拒否されます。- Postgres ソースでは TLS と証明書検証がデフォルトで有効です。公的に信頼された証明書チェーンのソースであれば CA ファイルは不要です。プライベートまたは自己署名のソース CA の場合は、その PEM バンドルを
--ca-certificate <path>で渡してください。ClickHouse Cloud Postgres をソースとする場合は、clickhousectl cloud postgres certs getでそのバンドルを取得します。ホスト名の検証には--hostが使用されますが、--tls-host <hostname>を指定すると上書きされます。 - Kafka および Kinesis のパイプでは、
--authを省略すると認証情報のフラグから推測されます。認証情報のフラグを一切指定しない場合、認証は送信されません。 clickpipe settingsが対象とするのは、ストリーミング (Kafka、Kinesis) およびオブジェクトストレージのパイプのインジェスト設定のみで、Kafka 以外のパイプでは Kafka 専用の設定は省略されます。データベース CDC (変更データキャプチャ) パイプ (Postgres、MySQL、MongoDB、BigQuery) にはインジェスト設定がありません。これらに対してsettings getを実行すると終了コード 1 で終了し、clickhousectl cloud clickpipe get <service-id> <clickpipe-id>が案内されます。同期間隔と Pull バッチサイズはこのコマンドで確認できます。- パイプが利用できるのは
Readyステータスに達した Reverse Private Endpoint のみです。AWS PrivateLink endpoint は、ソースを所有するアカウントで接続リクエストが承認されるまでPendingAcceptanceのままとなります。Kafka のパイプは--reverse-private-endpoint-id(繰り返し指定可能) で endpoint を ID により参照します。Postgres および MySQL の CDC (変更データキャプチャ) パイプでは、endpoint のdnsNamesのいずれかを--hostとして渡します。 - Google Cloud Pub/Sub のパイプはリミテッドプレビュー段階です。作成する前に、サポートに連絡して組織向けに機能を有効化してもらってください。
--service-account-fileには GCP サービスアカウントの JSON キーのパスを指定するか、-を指定して標準入力からキーを読み込みます。キーをインラインで指定することはできないため、プロセス一覧やシェル履歴に残ることはありません。
Postgres サービス (ベータ)
ClickHouse Cloud Postgres サービスを作成・管理します。--providerのデフォルトはawsです。gcpも指定でき、その場合はc4-standard-4などの GCP マシンサイズを使用します。--sizeは CLI ではなく Cloud API で検証されるため、サポートされていないサイズはサーバー側ではじめて拒否されます。- ロールの変更は結果整合性であり、API は
promoteとswitchoverを実際に適用する前に受理を返します。そのため、終了コードが 0 であることだけではロールが変更されたとは確認できません。どちらのコマンドも--waitを指定すると、対象が新しいロールを報告するまでポーリングし、--wait-timeout <seconds>(デフォルト 300)でポーリングの上限時間を指定できます。切り替え前のプライマリは、その後も数分間isPrimary=trueを報告し続けることがあるため、clickhousectl cloud postgres list --filter isPrimary=trueでプライマリのサービスがちょうど 1 つであることを確認してください。 postgres deleteはrunningを含むあらゆる状態から実行できるため、事前にサービスを停止する必要はありません。
組織
API キー
メンバーと招待
アクティビティログ
JSON 出力
任意の cloud コマンドで JSON 形式のレスポンスを取得するには、--json フラグを使用します。
org prometheus および service prometheus コマンドは例外で、常に生の Prometheus exposition テキストを出力し、--json は黙って無視されます。
ローカル開発
CLI は、ローカルの ClickHouse インストール、ローカルサーバー、Docker ベースのローカル Postgres インスタンスの管理も行えます。ローカル開発を始めるには、clickhousectl (CLI) ページを参照してください。localコマンドはプロジェクト単位のスコープを持ちます。現在の作業ディレクトリ直下の.clickhouseディレクトリを使用し、親ディレクトリをたどって検索することはありません。実行前にプロジェクトルートへ移動してください。clickhousectl local useは~/.local/bin/clickhouseへのシンボリックリンクも作成し、clickhouse client、clickhouse benchmark、clickhouse formatといった標準サブコマンドを直接利用できるようにします。シンボリックリンクの作成をスキップするには--no-globalを指定します。local removeにはインストール済みのバージョンを正確に指定します。いずれかのプロジェクトで稼働中のサーバーが使用しているバージョン、および現在のデフォルトになっているバージョンは削除できません。--forceを指定すると、それらのサーバーを停止したうえで、デフォルト設定とグローバルシンボリックリンクを解除します。- 名前を指定しない場合、
local server stopはdefaultが存在すればそれを停止し、存在しなければ唯一認識されているサーバーを停止します。デフォルト以外のサーバーが複数ある場合は名前の指定を求めます。名前を指定しないlocal server removeは既存のdefaultのみを選択対象とし、カスタムサーバーを推測して選ぶことはありません。 local clientは、ホスト/ポートを直接指定するモードで-v/--versionによりインストール済みのクライアントバージョンを選択でき、-qを繰り返し指定することで複数のクエリを渡せるほか、--queries-fileには複数のパスを指定できます。--queryと--queries-fileの併用は使用方法の誤りとなります。local postgres startは PostgreSQL が接続を受け付けるまでブロックします。待機時間の上限は--wait-timeout秒です(デフォルト 60、最大 600)。--portを省略した場合、5432 が空いていればそれを使用し、空いていなければポートを自動選択します。明示的に指定したポートが既に使用中の場合は拒否されます。
その他のコマンド
要件
- macOS (aarch64、x86_64) または Linux (aarch64、x86_64)
- Cloud コマンドで書き込みアクセスを行うには ClickHouse Cloud API キー が必要です。OAuth ログインは read-only です
clickhousectl local postgresには Docker が必要です