ClickHouse 26.5 發布:ORDER BY LIMIT 下推 JOIN 加速 20 倍,新增 filesystem 函數與 Web Terminal
ClickHouse Blog · 2026-06-01
ClickHouse 26.5 於 2026-06-01 正式發布,包含 38 項新功能、51 項效能優化與 224 個 bug 修復。本版最顯著的效能突破是查詢計劃器在 ORDER BY...LIMIT 通過 JOIN 節點時的下推優化,以及 GROUP BY...LIMIT 的提前終止策略。
核心改動
ORDER BY...LIMIT 下推 JOIN:當排序鍵依賴 JOIN 保留側(preserved side)時,查詢計劃器現在將排序與限制操作推入 JOIN 之前執行,大幅縮減 JOIN 的輸入規模。實測加速 20.4 倍,記憶體消耗降低約 175 倍。
GROUP BY...LIMIT(無 ORDER BY):識別到不需要全量 aggregation 結果的模式後,限制 hash table 大小並提前終止聚合。實測加速 11.9 倍,記憶體降低約 185 倍。
新功能方面:
- filesystem() 表函數:以 SQL 查詢本機檔案系統的元數據(size、mtime、permissions),適合資料目錄審計
- Web Terminal(實驗性):透過 HTTP interface 直接在瀏覽器中使用 clickhouse-client,無需安裝客戶端
- Multi-path SQL/JSON:JSON_VALUE / JSON_QUERY 可接受路徑 tuple 或陣列,一次解析 JSON 回傳多個欄位
- Negative LIMIT BY:負值 LIMIT BY 從分組尾端取行,補全原有的「取前 N」語義
- url_base 設定:為 url() 表函數定義基礎 URL,避免重複輸入前綴
影響範圍
ORDER BY LIMIT + JOIN 的下推優化對 OLAP 報表查詢影響最大——典型的「取銷售額 top 100 商品詳情」模式(JOIN 商品維度表後 ORDER BY + LIMIT)可直接受益。升級時無 breaking change,26.5 與前版 wire protocol 相容。filesystem() 函數需要 ClickHouse server 對本機路徑有讀取權限,容器部署時需注意 volume mount 設定。
ClickHouse JOIN 加速技術解析:統計重排、Runtime Filter 與延遲列複製讓兩年效能提升 26 倍
ClickHouse Blog · 2026-06-03
ClickHouse 工程部落格在 2026-06-03 發布技術文章,回顧過去兩年(v22.4 到 v26.4)JOIN 效能提升 26 倍的歷程,重點介紹三個關鍵優化:統計式 JOIN 重排、Runtime Filter 與延遲列複製。
核心改動
統計式 JOIN 重排(Statistics-based join reordering):查詢計劃器讀取列的 cardinality 估計值,自動選擇最小化中間結果的 JOIN 順序。以 TPC-H 六表 JOIN 為例:
| JOIN 順序 | 執行時間 | 記憶體 |
|---|---|---|
| 優化器自動選擇(最優) | 2.7 秒 | 3.9 GB |
| 人工次優順序 | 3903.7 秒 | 99 GB |
Runtime Filter:在 hash table 構建階段提取 bloom filter 或 min/max 值,在 probe 側實際查表前先過濾不可能匹配的行。三表 JOIN 測試:2.1 倍加速、記憶體降低 7 倍。
延遲列複製(Lazy column replication):JOIN 輸出中重複出現的字串列(如 dimension 表的國家名稱)改用緊湊字典表示,不實際複製字串 payload。含重複字串列的 JOIN 查詢加速約 1.9 倍。
影響範圍
統計式重排依賴準確的列統計資訊——需定期執行 ANALYZE TABLE 或開啟自動統計收集。Runtime filter 在選擇性高的過濾欄位上效果最佳,對低選擇性欄位收益有限。以上優化均已合入 26.4/26.5 穩定版,不需要額外設定即可生效。
DuckDB 1.5.3 Iceberg 新功能:MERGE INTO、ALTER TABLE、Partition Transform 與 Iceberg V3 支援
DuckDB News · 2026-05-29
DuckDB 1.5.3(2026-05-29 發布)大幅擴展了 Apache Iceberg 整合能力,新增 MERGE INTO upsert 語義、完整的 ALTER TABLE schema evolution、bucket/truncate partition transform,並率先支援 Iceberg V3 規格。
核心改動
MERGE INTO:讓 DuckDB 可對 Iceberg table 執行以 merge-on-read 語義實作的 upsert,不需要 primary key 定義。WHEN MATCHED / WHEN NOT MATCHED 子句支援每行獨立決定 INSERT、UPDATE 或 DELETE。
ALTER TABLE(Schema Evolution):支援欄位重命名、新增/刪除欄位,以及設定 format version。Iceberg 的 schema evolution 是無資料重寫的元數據操作,DuckDB 現在可直接發起這些操作而不需依賴 Spark 或 Flink。
Partition Transforms:
bucket(N, col):將值 hash 到 N 個桶,均勻分散資料truncate(W, col):字串取前 W 字元,數值向下取整至 W 的倍數
Iceberg V3 支援(主要新增):
VARIANT、TIMESTAMP_NS資料型別- 欄位預設值(column default values)
- Binary deletion vectors:以緊湊 Puffin 檔案取代 V2 的 Parquet 刪除檔,讀取效率更高
- Row lineage tracking:追蹤行的來源變更歷程
影響範圍
MERGE INTO 與 ALTER TABLE 填補了 DuckDB 在 Iceberg 作為寫入端的缺口,先前只能讀取。配合 DuckLake v1.0,DuckDB 已可在單機上完成完整的 lakehouse ETL 流程,不需啟動 Spark cluster。V3 deletion vectors 需要 Iceberg catalog 支援,AWS Glue、Snowflake Open Catalog 均已跟進。