在ClickHouse 1.1.54310中自定义分区

ClickHouse在版本 1.1.54310中引入了一个新特性:可以在MergeTree引擎的表上自定义分区。在引入这个特性之前,创建MergeTree必须使用日期字段进行分区之前以及按月分区。

新版本允许更多的灵活性,我们可以选择不仅基于日期字段的分区模式。

该功能仍在实验阶段,我们需要启动experimental_allow_extended_storage_definition_syntax标志服务器。

使用命令:

set  experimental_allow_extended_storage_definition_syntax = 1

我们来看看如何使用这个自定义分区。

我们将从网页https://clickhouse.yandex/docs/en/getting_started/example_datasets/ontime.html中提到的on-time基准表作为例子:

该表格创建为:

) ENGINE = MergeTree(FlightDate, (Year, FlightDate), 8192)

新的语法可以被重写为:

) ENGINE = MergeTree PARTITION BY toYYYYMM(FlightDate) Order By Year, FlightDate;

照葫芦画瓢,更改日常分区的定义:

) ENGINE = MergeTree PARTITION BY FlightDate Order By Year, FlightDate;

或者使用不同的非日期列分区:

) ENGINE = MergeTree PARTITION BY AirlineID Order By FlightDate;

现在,我们可以删除一个特定日期的数据(例如1987-01- 01)

ALTER TABLE ontime DROP PARTITION '1987-10-01';

为什么这个功能有用?

它提供了更好的粒度来管理数据。我们可以在商务任务所需的时间内执行数据维护,而不仅仅是按照规定的每月时间进行。

比如:我们可以一周删除一次数据,而非按月的粒度

有一件事要注意,粒度更细的分区可能会影响压缩。

例如,使用默认的每月分区和LZ4压缩,完整的ontime表在磁盘上占用7.7GB,而当我们切换到每日分区时,大小增长到15GB。这是因为用于压缩的数据变得更短,所以压缩效率较低。

你可能感兴趣的:(在ClickHouse 1.1.54310中自定义分区)