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 中的项目凭据、环境变量 (先 shell,后 .env) 、通过 cloud auth login 获取的 OAuth 令牌。
OAuth 令牌仅具备只读权限;写入类命令 (create、delete、start、stop、update、scale) 需使用 API 密钥 进行身份验证。
服务
运行查询
通过 Query API 经 HTTP 对 Cloud 服务执行 SQL —— 无需本地clickhouse binary,也无需 服务密码。--id 和 --name 必须且只能指定其中一个:
.clickhouse/credentials.json 中。传入 --no-auto-enable 可让命令直接失败,而不是自动创建这些资源。使用 OAuth 时,SQL 以你的 cloud 用户身份运行,仅具有只读权限 (仅限 SELECT) ,且不会创建任何资源。
需要注意的事项:
service query每个请求只执行一条语句。无论通过哪种方式传入——--query、--queries-file还是 stdin——Query API 都会拒绝多语句 SQL,并返回Error: SQL error 62: Syntax error (Multi-statements are not allowed)。单条语句末尾带;没有问题。如需执行脚本,请运行clickhousectl local use latest,改用clickhouse client连接该 服务。--query与--queries-file互斥 (退出码 2) 。只有在两者都未提供时才会读取 stdin。--query从不读取 stdin,因此在使用它的同时重定向或通过管道传入数据会直接报错,而不会静默地变成空操作:Error: --query cannot be combined with SQL or data on stdin.应改为将INSERT及其数据作为单个 stream 发送——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 密钥 被端点以 HTTP 401/403 拒绝,它永远不会被自动替换;命令行客户端读取该 key 的管理记录只是为了报告原因。请使用
clickhousectl cloud service repair-query-key <service-id>替换这一个 credential,该命令同时会删除被替换掉的 key。对于正在运行的 服务,只有在使用新 key 的探测查询成功后,命令才会以 0 退出,结果会在--json输出的verification中报告。如果在 readiness 窗口结束时 Query API 仍拒绝该 key,命令会以 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 调用之前由命令行客户端进行校验。它还要求备份周期为 24 或 48 小时:请在同一条命令中传入 --backup-period-hours 24 或 --backup-period-hours 48,或者事先已存储了这两个值之一。若已存储的周期为其他值,命令行客户端会在调用 API 之前拒绝执行,并提示 Error: the stored backup period is 12 hours, but --backup-start-time requires 24 or 48.
--clear-backup-start-time 会移除已存储的开始时间,并解除该限制。将其与 --backup-period-hours 搭配使用,即可在一次调用中清除开始时间并设置任意周期。该参数与 --backup-start-time 互斥。
备份
clickhousectl cloud service create --name restored-service --backup-id <backup-id>。
ClickPipes
管理 ClickPipes,用于将数据摄取到 Cloud 服务中。大多数命令以服务 ID 作为第一个参数。clickpipe create postgres需要--table-mapping <schema.table:target_table>(可重复指定,每个 标志 对应一张表) 或--table-mapping-json <json>二者之一,也可同时使用。JSON 形式会原样接受 API 的表映射对象,并且是设置excludedColumns、sortingKeys、partitionByExpr、partitionKey和tableEngine的唯一方式。请注意,partitionKey用于对初始 snapshot 分区以实现并行处理,与目标表的PARTITION BY(即partitionByExpr) 无关。使用--auth IAM_ROLE时必须指定--iam-role,而在基本身份验证下指定该参数会被拒绝;--replication-slot-name仅在--replication-mode cdc_only下有效。- Postgres CDC 设置在创建 pipe 时生效:
--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。创建之后只有 sync interval 和 pull batch size 可以修改,snapshot 与初始加载相关的设置无法修改。 - 任意
clickpipe create子命令中的--role <role>可重复指定,用于选择授予该 pipe 的 destination 用户的 ClickHouse 角色。它会替换该用户原本会获得的 角色:未指定--role时,该用户拥有clickpipes_system和default_role;指定--role my_role时,则拥有clickpipes_system和my_role。该 角色 必须能够在 destination database 中创建表——只读 角色 会导致创建失败并报Not enough privileges。API 保留名称clickpipes和clickpipes_system会被拒绝。 - 对于 Postgres source,TLS 和 certificate verification 默认开启。若 source 的证书链由公共信任机构签发,则无需 CA 文件;若 source CA 为私有或自签名,请通过
--ca-certificate <path>传入其 PEM bundle。对于 ClickHouse Cloud Postgres source,可使用clickhousectl cloud postgres certs get获取该 bundle。hostname 验证默认使用--host,除非通过--tls-host <hostname>覆盖。 - 对于 Kafka 和 Kinesis pipe,省略
--auth时会根据 credential 相关 标志 自动推断;若未提供任何 credential 标志,则不发送 authentication 信息。 clickpipe settings仅涵盖流式 (Kafka、Kinesis) 和对象存储 pipe 的摄取设置,且对非 Kafka pipe 会省略 Kafka 专有设置。数据库 CDC pipe (Postgres、MySQL、MongoDB、BigQuery) 没有摄取设置:对其执行settings get会以退出码 1 退出,并提示改用clickhousectl cloud clickpipe get <service-id> <clickpipe-id>,其 sync interval 和 pull batch size 由该命令报告。- pipe 只能使用已达到
Ready状态的 reverse private endpoint;AWS PrivateLink endpoint 会一直处于PendingAcceptance,直到在拥有该 source 的账户中接受连接请求。Kafka pipe 通过--reverse-private-endpoint-id(可重复指定) 按 ID 引用 endpoint;Postgres 和 MySQL CDC pipe 则将 endpoint 的某个dnsNames作为--host传入。 - Google Cloud Pub/Sub pipe 处于受限预览阶段:创建之前请 contact support 为你的组织启用该功能。
--service-account-file接收 GCP service account JSON 密钥的路径,或使用-从 stdin 读取密钥;密钥绝不支持内联传入,因此不会出现在进程列表和 shell 历史记录中。
Postgres 服务 (Beta)
创建并管理 ClickHouse Cloud Postgres 服务。--provider默认为aws;也支持gcp,并可使用c4-standard-4等 GCP 机器规格。--size由 Cloud API 校验,而非命令行客户端,因此不受支持的规格只会在服务端被拒绝。- 角色变更是最终一致的,且 API 会在实际应用
promote和switchover之前就予以确认,因此仅凭退出码 0 并不能说明角色已变更。两者均支持--wait,可持续轮询直至目标报告新角色,并可用--wait-timeout <seconds>(默认 300) 限制轮询时长。原主节点在此后数分钟内仍可能报告isPrimary=true,因此请通过clickhousectl cloud postgres list --filter isPrimary=true确认有且仅有一个服务为主节点。 postgres delete在任意状态下均可执行,包括running,因此无需先停止该服务。
组织
API 密钥
成员与邀请
活动日志
JSON 输出
使用--json 标志可让任何云端命令返回 JSON 格式的响应:
org prometheus 和 service prometheus 命令是例外:它们始终输出原始的 Prometheus exposition 文本,并会静默忽略 --json。
本地开发
该命令行客户端还可管理本地 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 登录为只读
clickhousectl local postgres需要 Docker