ClickHouse在版本 1.1.54310中引入了一個新特性:可以在MergeTree引擎的表上自定義分區(qū)。在引入這個特性之前,創(chuàng)建MergeTree必須使用日期字段進(jìn)行分區(qū)之前以及按月分區(qū)。
新版本允許更多的靈活性,我們可以選擇不僅基于日期字段的分區(qū)模式。
該功能仍在實驗階段,我們需要啟動experimental_allow_extended_storage_definition_syntax標(biāo)志服務(wù)器。
使用命令:
set? experimental_allow_extended_storage_definition_syntax = 1
我們來看看如何使用這個自定義分區(qū)。
我們將從網(wǎng)頁https://clickhouse.yandex/docs/en/getting_started/example_datasets/ontime.html中提到的on-time基準(zhǔn)表作為例子:
該表格創(chuàng)建為:
) ENGINE = MergeTree(FlightDate, (Year, FlightDate), 8192)
新的語法可以被重寫為:
) ENGINE = MergeTree PARTITION BY toYYYYMM(FlightDate) Order By Year, FlightDate;
照葫蘆畫瓢,更改日常分區(qū)的定義:
) ENGINE = MergeTree PARTITION BY FlightDate Order By Year, FlightDate;
或者使用不同的非日期列分區(qū):
) ENGINE = MergeTree PARTITION BY AirlineID Order By FlightDate;
現(xiàn)在,我們可以刪除一個特定日期的數(shù)據(jù)(例如1987-01- 01)
ALTER TABLE ontime DROP PARTITION '1987-10-01';
為什么這個功能有用?
它提供了更好的粒度來管理數(shù)據(jù)。我們可以在商務(wù)任務(wù)所需的時間內(nèi)執(zhí)行數(shù)據(jù)維護(hù),而不僅僅是按照規(guī)定的每月時間進(jìn)行。
比如:我們可以一周刪除一次數(shù)據(jù),而非按月的粒度
有一件事要注意,粒度更細(xì)的分區(qū)可能會影響壓縮。
例如,使用默認(rèn)的每月分區(qū)和LZ4壓縮,完整的ontime表在磁盤上占用7.7GB,而當(dāng)我們切換到每日分區(qū)時,大小增長到15GB。這是因為用于壓縮的數(shù)據(jù)變得更短,所以壓縮效率較低。