Skip to content

附录 B:ClickHouse 常用命令速查表

开机即用的 ClickHouse 工具书。每张表按「语法 → 示例」成组,Ctrl+F 搜关键词即可。 基于 ClickHouse 24.x。低版本差异会注明。

目录

  1. clickhouse-client 命令行参数
  2. DDL 速查
  3. DML 速查
  4. DCL / 权限速查
  5. SYSTEM 命令族
  6. 聚合函数速查
  7. 常用字符串 / 日期 / 数组函数
  8. system.* 视图速查
  9. Docker 启动 / 备份 / 监控片段
  10. 关键配置参数 Top 30

1. clickhouse-client 命令行参数

参数作用
-h 127.0.0.1 --port 9000TCP 连接地址(HTTP 用 --port 8123 --secure
-u default --password xxx用户名/密码(生产用环境变量 CLICKHOUSE_PASSWORD
-d learn_ck默认数据库
-q 'SELECT 1' / --query单行执行
-n / --multiquery允许多条 SQL
--multiline多行输入(分号结束)
--format TSV / JSONEachRow / Parquet / PrettyCompact输出格式
--time打印耗时
--progress打印进度条
--max_memory_usage=8G单查询内存上限
--stacktrace错误打栈
--echo回显 SQL
--compression 1开启网络层压缩
--input_format_allow_errors_num=10导入允许错误行数

常用组合

bash
clickhouse-client -h 127.0.0.1 --port 9000 -d learn_ck --multiline --time

# 流式 INSERT CSV
clickhouse-client -q "INSERT INTO events FORMAT CSV" < events.csv

# 跑脚本
clickhouse-client --multiquery < init.sql

# 直出 Parquet
clickhouse-client -q "SELECT * FROM events LIMIT 1e6" --format Parquet > dump.parquet

2. DDL 速查

2.1 库 / 表 / 视图

sql
CREATE DATABASE IF NOT EXISTS learn_ck;
DROP DATABASE learn_ck SYNC;                              -- SYNC = 真删除
RENAME DATABASE old_db TO new_db;

CREATE TABLE t (id UInt64, v String) ENGINE = MergeTree ORDER BY id;
CREATE TABLE t2 AS t ENGINE = MergeTree ORDER BY id;       -- 复制结构
CREATE TABLE t3 ENGINE = MergeTree ORDER BY id AS SELECT * FROM t;

DROP TABLE t;  DROP TABLE t NO DELAY;                      -- 立刻
TRUNCATE TABLE t;                                          -- 保留结构清空
RENAME TABLE t TO tt;

CREATE VIEW v_today AS SELECT ...;                         -- 只是 SQL 别名
CREATE MATERIALIZED VIEW mv TO target AS SELECT ...;       -- INSERT 触发器
CREATE LIVE VIEW lv AS ...;                                -- 实时推送(实验性)

2.2 列操作

sql
ALTER TABLE t ADD COLUMN  age UInt8 DEFAULT 0 AFTER id;
ALTER TABLE t DROP COLUMN extra;
ALTER TABLE t MODIFY COLUMN v LowCardinality(String);
ALTER TABLE t RENAME COLUMN v TO val;
ALTER TABLE t COMMENT COLUMN val '标题';
ALTER TABLE t MODIFY COLUMN ip CODEC(ZSTD(3));
ALTER TABLE t MODIFY TTL event_time + INTERVAL 30 DAY DELETE;

2.3 索引 / Projection

sql
ALTER TABLE t ADD INDEX idx_p product_id TYPE minmax    GRANULARITY 4;
ALTER TABLE t ADD INDEX idx_u user_id    TYPE bloom_filter(0.01) GRANULARITY 4;
ALTER TABLE t ADD INDEX idx_n name       TYPE ngrambf_v1(3, 256, 2, 0) GRANULARITY 4;
ALTER TABLE t DROP INDEX idx_p;
ALTER TABLE t MATERIALIZE INDEX idx_p;
ALTER TABLE t CLEAR INDEX idx_p IN PARTITION '2026';

ALTER TABLE t ADD PROJECTION pj (SELECT * ORDER BY user_id);
ALTER TABLE t MATERIALIZE PROJECTION pj;
ALTER TABLE t DROP PROJECTION pj;

2.4 分区操作

sql
ALTER TABLE t DROP   PARTITION '20260417';
ALTER TABLE t DETACH PARTITION '20260417';       -- 移到 detached/ 目录
ALTER TABLE t ATTACH PARTITION '20260417';
ALTER TABLE t REPLACE PARTITION '20260417' FROM t_src;
ALTER TABLE t MOVE PARTITION '20260417' TO DISK 'cold';
ALTER TABLE t FREEZE PARTITION '20260417';        -- 硬链到 shadow/,用于备份

2.5 Mutation

sql
ALTER TABLE t UPDATE price = price * 0.9 WHERE product_id = 1;
ALTER TABLE t DELETE WHERE event_date < '2024-01-01';
DELETE FROM t WHERE event_date = '2024-01-01';    -- lightweight DELETE

3. DML 速查

sql
-- INSERT 五花八门
INSERT INTO t VALUES (1, 'a'), (2, 'b');
INSERT INTO t (id, v) SELECT id, name FROM src;
INSERT INTO t FORMAT JSONEachRow {"id":1,"v":"a"}
INSERT INTO t FORMAT CSV 1,a

-- async_insert:高频小批场景
INSERT INTO t SETTINGS async_insert=1, wait_for_async_insert=0 VALUES (1,'a');

-- SELECT 常见
SELECT * FROM t ORDER BY id DESC LIMIT 10 OFFSET 20;
SELECT * FROM t SAMPLE 0.01;                      -- 抽样 1%
SELECT * FROM t WHERE ... SETTINGS max_threads = 16;
SELECT * FROM t FINAL;                            -- ReplacingMergeTree 取最新
SELECT * FROM t PREWHERE user_id = 42 WHERE ...;  -- 先过滤,后读其他列

-- WITH FILL / WITH TIES
SELECT d, count()
FROM t GROUP BY d
ORDER BY d WITH FILL FROM '2026-04-01' TO '2026-04-30' STEP 1;

-- EXPLAIN 三兄弟
EXPLAIN SELECT ...;            -- AST
EXPLAIN PLAN SELECT ...;       -- 逻辑计划
EXPLAIN PIPELINE SELECT ...;   -- 物理流水线
EXPLAIN ESTIMATE SELECT ...;   -- 扫描行估算
EXPLAIN SYNTAX SELECT ...;     -- 规范化 SQL

4. DCL / 权限速查

sql
CREATE USER alice IDENTIFIED WITH sha256_password BY 'pass'
    HOST IP '10.0.0.0/8' SETTINGS PROFILE 'readonly';

CREATE ROLE analyst;
GRANT SELECT ON learn_ck.* TO analyst;
GRANT analyst TO alice;
SET ROLE analyst;

-- 列 / 行级
GRANT SELECT(user_id, price) ON learn_ck.events_raw TO alice;
CREATE ROW POLICY po_country ON learn_ck.events_raw
    USING country = 'CN' TO analyst;

-- 配额
CREATE QUOTA q1 FOR INTERVAL 1 HOUR MAX QUERIES 100, READ ROWS 1e8 TO alice;

SHOW GRANTS FOR alice;
SHOW USERS;  SHOW ROLES;  SHOW PROFILES;

5. SYSTEM 命令族

命令作用
SYSTEM RELOAD CONFIG热加载 config.xml / users.xml
SYSTEM RELOAD DICTIONARY d刷新字典
SYSTEM FLUSH LOGSquery_log 等缓冲落盘
SYSTEM STOP / START MERGES [table]暂停 / 恢复后台合并
SYSTEM STOP / START TTL MERGESTTL 合并开关
SYSTEM STOP / START REPLICATED SENDS [table]副本同步开关
SYSTEM SYNC REPLICA t同步等待副本追平
SYSTEM RESTART REPLICA t重新挂载副本
SYSTEM DROP MARK CACHE清 Mark 缓存
SYSTEM DROP UNCOMPRESSED CACHE清未压缩缓存
SYSTEM DROP QUERY CACHE清查询缓存
KILL QUERY WHERE query_id='xxx'杀查询
KILL MUTATION WHERE mutation_id='...'杀 Mutation
OPTIMIZE TABLE t FINAL强制合并(慎用)
CHECK TABLE t校验数据完整性

6. 聚合函数速查

6.1 计数 / 求和 / 极值

函数说明
count() / count(col) / countIf(cond)计数
sum / avg / min / max常规
sumWithOverflow显式溢出
any(col) / anyLast(col) / anyHeavy任取 / 最后一条 / 高频值
argMax(v, k) / argMin(v, k)按 k 最大/最小时的 v
median(col)中位数(= quantile(0.5)

6.2 去重 / 基数

函数精度内存场景
uniqExact(x)精确O(n)小数据量 / 必须精确
uniq(x)~0.5% 误差(HLL)O(1)默认推荐
uniqHLL12(x)~0.8%更省节省内存
uniqCombined(12)(x)~0.8%平衡亿级去重
uniqTheta(x)~0.4%可交集Theta sketch

6.3 分位数

函数说明
quantile(0.95)(x)近似(reservoir sampling)
quantileExact(0.95)(x)精确(但内存大)
quantileTDigest(0.95)(x)推荐:快 + 小内存
quantileTiming(x)专为延迟毫秒优化
quantilesTDigest(0.5,0.9,0.99)(x)批量多分位

6.4 Top-K / 路径 / 漏斗

函数说明
topK(10)(x)Top-10 高频值
topKWeighted(10)(x, w)带权 Top-K
groupArray(x) / groupArray(100)(x)聚合成数组
groupUniqArray(x)去重数组
sequenceMatch('(?1)(?2)')(ts, cond1, cond2)事件序列匹配
sequenceCount('(?1)(?2)')(ts, ...)匹配次数
windowFunnel(3600)(ts, c1, c2, c3)漏斗,返回最深第几步
retention(c1, c2, c3)多日留存数组

6.5 状态后缀(灵魂)

后缀含义
sumState / uniqState / quantileState / ...返回「聚合中间状态」(二进制),用于物化视图存储
sumMerge / uniqMerge / quantileMerge / ...把多个 State 合并成最终结果
sumMergeState / ...合并 State 但仍返回 State(用于多级 MV)
-If 后缀条件聚合:sumIf(x, cond)
-Array 后缀数组元素聚合:sumArray([1,2,3])
-OrNull / -OrDefault 后缀无数据时返回 NULL / 默认值
-ForEach 后缀对数组每个位置分别聚合

7. 常用字符串 / 日期 / 数组函数

7.1 字符串

函数示例
length / lengthUTF8字节 / 字符长度
lower / upper / reverse-
substring(s, pos, len)-
position / positionCaseInsensitive查子串
replaceOne / replaceAll / replaceRegexpAll-
extract / extractAll正则抽取
splitByChar / splitByString / arrayStringConcat切 / 拼
startsWith / endsWith / like / match-
base64Encode / base64Decode / hex / unhex-
JSONExtractString(s, 'a.b')JSON 取值

7.2 日期

函数示例
now() / now64()-
toDate / toDateTime / toDateTime64转类型
toYYYYMM / toYYYYMMDD / toHour / toDayOfWeek常用分区键
toStartOfHour / toStartOfDay / toStartOfMonth时间桶
dateDiff('day', a, b)差值
addDays / subtractDays / dateAdd('hour', 1, t)加减
formatDateTime(t, '%Y-%m-%d')格式化
toTimeZone(t, 'Asia/Shanghai')时区转换

7.3 数组 / Map / Tuple

函数示例
arrayJoin(a)每个元素展开为一行(= LATERAL VIEW EXPLODE)
length(a) / empty(a) / has(a, x)-
arrayMap(x -> x*2, a)映射
arrayFilter(x -> x>0, a)过滤
arraySum / arrayAvg / arrayMin / arrayMax聚合
arrayZip(a, b)并联
arrayFlatten(aa)拍平
arrayEnumerate(a)索引数组
arrayExists / arrayAll存在 / 全为
mapKeys(m) / mapValues(m) / mapContains(m, k)Map 操作

8. system.* 视图速查

8.1 元数据

视图一句话用途
system.databases
system.tables
system.columns列(类型、压缩、默认值)
system.functions所有内置/UDF 函数
system.formats支持的 FORMAT
system.settings所有 Settings + 当前值
system.users / system.roles / system.grants用户 / 角色 / 权限

8.2 运行时 / 性能

视图用途
system.processes正在跑的 query
system.query_log每次查询的耗时、读行数、内存
system.query_thread_log线程级别细节
system.trace_log采样栈(火焰图原料)
system.metric_log每秒 metric 快照
system.asynchronous_metric_log后台 metric
system.text_log服务端日志(需要开启)
system.crash_log崩溃栈
system.errors历史错误码累计

8.3 MergeTree / 副本

视图用途
system.parts每个 Part 的行数、字节、状态
system.part_logPart 生命周期事件(NewPart / MergeParts / MovePart)
system.merges当前正在合并的任务
system.mutationsMutation 进度、异常
system.replicas副本状态(lag、队列大小)
system.replication_queue副本同步队列详情
system.replicated_fetches正在拉 Part
system.distribution_queueDistributed 表异步写入队列
system.zookeeper从 Keeper 读任意路径
system.dictionaries字典状态 / 命中率
system.kafka_consumersKafka 消费者状态

8.4 存储 / 磁盘

视图用途
system.disks所有 disk
system.storage_policies策略和 volume
system.data_skipping_indicesSkip Index 命中情况
system.projectionsProjection 状态

常用排查 SQL

sql
-- Top 20 慢查询
SELECT query_duration_ms, read_rows, memory_usage, left(query, 200)
FROM system.query_log
WHERE event_date = today() AND type = 'QueryFinish'
ORDER BY query_duration_ms DESC LIMIT 20;

-- 活跃 Part 最多的表
SELECT database, table, count() AS parts, sum(rows) AS rows
FROM system.parts WHERE active
GROUP BY database, table ORDER BY parts DESC LIMIT 10;

-- Mutation 卡着
SELECT database, table, mutation_id, command,
       create_time, is_done, latest_fail_reason
FROM system.mutations WHERE is_done = 0 ORDER BY create_time;

-- 副本滞后
SELECT database, table, queue_size, absolute_delay,
       log_pointer, total_replicas, active_replicas
FROM system.replicas WHERE queue_size > 0 OR absolute_delay > 30;

-- 字典命中率
SELECT name, element_count, hit_rate, bytes_allocated, last_exception
FROM system.dictionaries;

9. Docker 启动 / 备份 / 监控片段

9.1 Docker 快速起单机

yaml
# docker-compose.yml
services:
  ck:
    image: clickhouse/clickhouse-server:24.8
    container_name: learn_ck_server
    ports:
      - "8123:8123"     # HTTP
      - "9000:9000"     # TCP
      - "9009:9009"     # 副本互传
    volumes:
      - ./data:/var/lib/clickhouse
      - ./logs:/var/log/clickhouse-server
      - ./config.d:/etc/clickhouse-server/config.d   # 自定义配置
      - ./users.d:/etc/clickhouse-server/users.d
    ulimits:
      nofile:
        soft: 262144
        hard: 262144
    environment:
      CLICKHOUSE_DB: learn_ck
      CLICKHOUSE_USER: default
      CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1

9.2 备份

bash
# ① 官方 BACKUP / RESTORE(24.x 推荐)
clickhouse-client -q "BACKUP DATABASE learn_ck TO Disk('backups', 'full_$(date +%F)')"
clickhouse-client -q "RESTORE DATABASE learn_ck FROM Disk('backups','full_2026-04-17')"

# ② clickhouse-backup(Altinity 出品,支持 S3)
clickhouse-backup create    full_$(date +%F)
clickhouse-backup upload    full_$(date +%F)           # 上 S3/OSS
clickhouse-backup list      remote
clickhouse-backup download  full_2026-04-17
clickhouse-backup restore   full_2026-04-17

# ③ 物理快照(分区级)
clickhouse-client -q "ALTER TABLE events_raw FREEZE PARTITION '20260417'"
# 产物在 /var/lib/clickhouse/shadow/<N>/...  用 rsync / tar 带走

9.3 Prometheus 监控

xml
<!-- /etc/clickhouse-server/config.d/prometheus.xml -->
<clickhouse>
    <prometheus>
        <endpoint>/metrics</endpoint>
        <port>9363</port>
        <metrics>true</metrics>
        <events>true</events>
        <asynchronous_metrics>true</asynchronous_metrics>
    </prometheus>
</clickhouse>

Grafana 用官方 Dashboard ID 14192 / 13500 直接导入。


10. 关键配置参数 Top 30

10.1 服务器 / 内存

参数推荐作用
max_server_memory_usage_to_ram_ratio0.9实例内存占用上限
max_memory_usage10~20G单查询内存上限
max_memory_usage_for_user0.5 × 总内存单用户累计
max_concurrent_queries100并发查询上限
max_concurrent_insert_queries50并发 INSERT 上限
max_threadsCPU 核数单 query 并行度
max_insert_threads4INSERT 并行度
max_execution_time60查询超时

10.2 写入

参数推荐作用
max_insert_block_size1048576批量块大小
async_insert1(按场景)开启 async
async_insert_max_data_size1MBasync 触发刷盘大小
async_insert_busy_timeout_ms200async 刷盘间隔
wait_for_async_insert1(强一致)async 同步等待
insert_deduplicate1Replicated 去重
parts_to_throw_insert3000活跃 Part 爆表阈值
parts_to_delay_insert150开始 backpressure

10.3 MergeTree / 合并

参数推荐作用
index_granularity8192Granule 粒度
merge_max_block_size8192合并块大小
max_bytes_to_merge_at_max_space_in_pool150G单次合并上限
old_parts_lifetime480s合并后旧 Part 保留时长
replicated_deduplication_window100副本去重窗口

10.4 查询 / 优化器

参数推荐作用
optimize_move_to_prewhere1自动下推过滤
optimize_read_in_order1命中 ORDER BY 走顺序读
use_query_cache0(按场景)查询缓存
join_algorithmhash / grace_hash / partial_mergeJOIN 算法
distributed_product_modedenyglobalDistributed JOIN 控制
prefer_localhost_replica1本地副本优先

10.5 日志 / 安全

参数推荐作用
log_queries1开启 query_log
log_query_threads1开启线程级日志
query_log.ttl30 DAY清理策略
readonly0/1/2用户只读级别
allow_ddl0/1是否允许 DDL

修改方式:

sql
-- 会话级
SET max_threads = 16;

-- 用户 / Profile 级(users.xml 或 ALTER SETTINGS PROFILE)
ALTER SETTINGS PROFILE bi_ro SETTINGS max_memory_usage = 20000000000;

-- 服务级(config.xml / config.d/*.xml,热加载 SYSTEM RELOAD CONFIG)

📌 三件套搭配:附录 A(对比速查)· 附录 B(本文)· 附录 C(踩坑集)。遇问题顺手 Ctrl+F。