ClickHouse 26.5:ORDER BY/GROUP BY 的 LIMIT 下推與 Filesystem 表函式
ClickHouse · 2026-06-01
ClickHouse 26.5 於 2026 年 6 月 1 日釋出,包含 38 項新功能、51 項效能優化與 224 個 bug 修正,本版本效能優化數量為歷史最高。兩項查詢執行優化尤其顯著,在 TPC-H 基準測試中展示出雙位數倍的速度提升。
ORDER BY...LIMIT 下推至 Join 之前
傳統上 ORDER BY ... LIMIT N 在 JOIN 完成後才執行,意味著 JOIN 必須先產出完整的大型結果集再排序截斷。26.5 實作了將 LIMIT 操作推移至 JOIN 之前的優化,讓資料庫在 JOIN 前先縮減每個輸入集的規模。TPC-H scale factor 100 的測試結果:
| 指標 | 改善幅度 |
|---|---|
| 執行速度 | 20.4× |
| 峰值記憶體 | ~175× 減少 |
GROUP BY...LIMIT(無 ORDER BY)優化
當查詢包含 GROUP BY ... LIMIT N 但沒有 ORDER BY(即不需要特定排序,只需取任意 N 個群組),ClickHouse 現在避免建構不必要的群組。同樣在 TPC-H scale factor 100 上:
| 指標 | 改善幅度 |
|---|---|
| 執行速度 | 11.9× |
| 峰值記憶體 | ~185× 減少 |
Filesystem 表函式與其他新功能
新的 filesystem() 表函式允許以 SQL 查詢本機檔案系統,列出檔案元資料(路徑、權限、修改時間、檔案大小、內容),不再需要切換至 shell 命令。
其他值得注意的新功能:
url_base設定:搭配url()表函式使用相對路徑,避免重複輸入完整 URL- 負數 LIMIT BY:從每個群組末尾選取資料列,適合查詢各群組最小值
- Multi-Path SQL/JSON:
JSON_VALUE/JSON_QUERY接受多個路徑,每次解析 JSON 一次即可處理所有路徑 - 實驗性 Web Terminal:瀏覽器內建的 ClickHouse 互動式用戶端
DuckDB-Iceberg 1.5.3:MERGE INTO、Schema Evolution 與 Iceberg v3 刪除向量
DuckDB · 2026-05-29
DuckDB 1.5.3 同步更新了 DuckDB-Iceberg 擴充套件,補齊了生產環境 lakehouse 工作負載所需的多項關鍵功能:upsert 操作、DDL schema 變更、高基數分區策略,以及 Iceberg 規格第三版的新特性支援。
MERGE INTO 支援
Iceberg 表現在完整支援 MERGE INTO 語句,允許在沒有主鍵的情況下執行 upsert 操作:依照匹配條件對每一列決定 INSERT、UPDATE 或 DELETE。實作上 DuckDB 將 MERGE 分解為一個讀取-決策-寫入的三階段操作,並利用 Iceberg 的 copy-on-write 語意確保原子性。
Schema Evolution(DDL 操作)
先前版本對 Iceberg 表的 ALTER TABLE 操作支援有限。1.5.3 補全了以下操作:
- 欄位重新命名(Rename Column)
- 新增欄位(Add Column)
- 刪除欄位(Drop Column)
- 規格版本調整(format-version upgrade)
以上操作均為純 metadata 操作,不觸碰底層 Parquet 資料檔,因此執行速度接近即時。
進階分區策略
新增 bucket(雜湊分桶)與 truncate(前綴截斷)兩種分區轉換(partition transforms),這是 Iceberg 規格中針對高基數欄位(如 UUID、用戶 ID)的官方分區方式。Bucket 分區將值雜湊到 N 個桶中,避免資料傾斜;Truncate 以字串或數字的前 N 個字元/位為分區鍵,適合時間序列 ID。
Iceberg v3 特性
本次更新開始支援 Iceberg v3 規格新增的特性:
- VARIANT 與 TIMESTAMP_NS 資料型別:支援半結構化資料與奈秒精度時間戳
- 欄位預設值:新增欄位時可設定預設值,舊資料列讀取時自動套用
- 二進位刪除向量(Binary Deletion Vectors):相較於 v2 的 Parquet 刪除檔,v3 改用更緊湊的 Roaring Bitmap 二進位格式,大幅降低小批次刪除操作的儲存開銷