ClickHouse的分区操作

ClickHouse提供的对数据分区管理的功能,某些情况数据量特别大,比如说发行投放广告的点击数,这部分数据就特别大,我们可以考虑按月份对数据进行分区,使用分区,可以更有效的管理和维护数据。例如,创建一个表log_test,按插入时间的年月进行分区。

CREATE TABLE log_test
(
    id Int64,
    uid Int64,
    create_time DateTime
)
ENGINE = MergeTree()
ORDER BY create_time
PARTITION BY toYYYYMM(create_time)

插入一些数据。

INSERT INTO log_test 
VALUES
 (1,20001,1698768000),
 (2,20002,1698768000),
 (3,20003,1698768000),
 (4,20004,1698768000), (1,20001,1701360000),
 (2,20002,1701360000),
 (3,20003,1701360000),
 (4,20004,1701360000);

插入之后,查看分区的信息。

SELECT partition, name, path, rows, bytes
FROM system.parts
WHERE database = '你的数据库'  AND table = 'log_test'


可以看到,clickhouse已经按我们设定的分区格式分区了,继续插入同样的数据,再次查看分区。


为什么同样的分区,不合并在一起呢,其实clickhouse的分区合并和之前说的数据去重机制是一样的,根据参数会在适当时机去合并认为要合并的分区,如果是因为精度问题,clickhouse会按照一定的策略去合并,下面自动合并后结果,rows的总行数不变,但是分区只剩下两个分区了。

当我们插入的数据之后,如果想要按照分区来查找数据。

SELECT * FROM log_test WHERE toYYYYMM(create_time) ='202311'


clickhouse分区操作,比如说分区时机,分区过程,有时候还需要和配置配合完成。深入了解,可以查看参考文档:

ClickHouse官方文档


上一篇:记录golang常用库-json处理

下一篇:linux环境PostgreSQL安装

关注公众号

发表评论