ClickHouse 26.8 LTS:用 |> 把 SQL 写成流水线,新增 EXPLAIN ANALYZE 与 ICU 分词器
ClickHouse 26.8 是 LTS 版本,包含 98 项新特性、128 项性能优化、556 个 bug 修复。
- 26.8 发布说明:https://clickhouse.com/blog/clickhouse-release-26-08
- 26.7 发布说明:https://clickhouse.com/blog/clickhouse-release-26-07
- Pipelined SQL 说明:https://clickhouse.com/blog/pipelined-sql-26.8
Pipelined SQL:用 |> 写多阶段流水线
从 22.12 起支持把 FROM 写在 SELECT 前;26.8 进一步引入 |> 操作符,把查询写成一连串变换:读表 → 过滤 → 聚合 → 排序 → LIMIT。
- 每个
|>是一个显式检查点,前一段本身就是一个完整查询,便于逐段构建与检查。 - 流水线在执行前会被转成标准 SQL,用
EXPLAIN SYNTAX可以看生成的常规 SQL。 EXTEND用于在保留已有列的同时追加计算列。- 中间结果别名可在下一阶段继续使用,例如先算 district_median,再在下一段对其做聚合,不用手写嵌套子查询或 CTE。
- 阶段顺序会影响结果:把
LIMIT 10放在第二次聚合之前,会先把中间结果限到 10 行。 - 流水线不限于
SELECT开头,凡 ClickHouse 接受SELECT的地方都能用:子查询、INSERT ... SELECT、视图。
后台查询
26.8 支持把查询放到后台执行,长查询不占住客户端。
PostgreSQL 风格正则操作符
新增 PostgreSQL 风格的正则操作符(如 ~、~*、!~ 等),从 PG 迁过来的写法可以直接复用。
Query → JSON AST → Query
可以把查询转成 JSON 形式的 AST,也可以用 JSON AST 提交查询。新增实验性方言 clickhouse_json,由 enable_json_ast_dialect 设置开启后选择。
文本分词器
- 新增
icu(locale)分词器:基于 ICU 的 Unicode 分词做 word token 切分;对中日文等不带空格的语言使用词典分词,避免被切成单字。 - 新增
splitByRegexp分词器:用正则作为分隔符切 token,控制更细。 - 文本索引支持
postprocessor参数:分词后对每个 token 做任意表达式变换(如lower)。 - 新增
system.stemmers系统表,列出stem函数支持的语言。
数据源与数据湖
- 新增
URL数据库引擎:指定 URL 前缀后,可把远端服务器上任意路径当表查询。 - 新增
bigquery表函数与BigQuery表引擎,便于从 BigQuery 迁到 ClickHouse。 - 支持 Amazon S3 Tables 的写入(Iceberg),除查询外可插入数据、建表。
- 支持通过 Snowflake Horizon catalog 读写 Iceberg 表,直接读对象存储里的数据文件。
- 支持 Puffin 文件格式(Iceberg 用来存统计信息与删除向量)。
URL表引擎 /url表函数按 scheme 分派:file://→ File,s3://、gs://、gcs://、oss://→ S3,az://、azure://、abfss://、abfs://→ AzureBlobStorage,hdfs://→ HDFS,http(s)://→ URL。url_base在 scheme 分派前生效;只有默认url_scheme_mappers覆盖的 S3 scheme 会被分派,cos/obs 等厂商 scheme 需直接用 s3 引擎/函数。- 新增
Remote/RemoteSecure表引擎(remote 表函数的持久化版):
CREATE TABLE ... ENGINE = Remote('addresses', db, table, ...)
- Kafka:
kafka_sasl_mechanism新增AWS_MSK_IAM,用 IAM role 认证 Amazon MSK,免管理 SCRAM 凭据。 - NATS/JetStream 表:新增
nats_flush_interval、nats_wait_for...设置,修复投递即 ack、插入失败可能丢数据的问题(新设置默认保持旧的低延迟行为)。
其他 SQL 能力
EXPLAIN ANALYZE(26.7 引入):真正执行查询,并把实际执行指标标注在查询计划上,弥合「计划 vs 实测」的差距。WHERE子句可用于 projection 定义:只物化匹配谓词的行,优化器在查询 WHERE 蕴含 projection WHERE 时可按代价使用。- 聚合函数 combinator
-Tuple:对 Tuple 列每个元素独立应用底层聚合,返回保持元素名的 Tuple。如sumTuple(t),t=(a,b) 返回 (sum(a),sum(b));多参数按位置配对,如corrTuple((a1,a2),(b1,b2))。与数组上的-ForEach不同,元素可以类型不同。 groupFormat聚合函数:按指定输出格式格式化每组行并返回字符串。- 标准 SQL 的
AT TIME ZONE/AT LOCAL作为toTimeZone的语法糖。 skip_unavailable_shards_mode设置(也是 Distributed 引擎设置):开启skip_unavailable_shards时,控制哪些远端分片异常可被静默忽略。- 新增
system.user_query_log:只包含当前用户的查询。
性能
- GROUP BY、Native Parquet 读取、JOIN 均有优化:两个不等式条件的 JOIN 由「过滤后的 CROSS JOIN」改为排序型
IEJoin;新增parallel_full_sorting_merge归并连接算法(按 key 哈希分片,全核并行);分布式查询计划新增基于基数估计的代价优化器。 - Iceberg manifest 文件预取。