clickhouse的表生命周期和分区操作

  |   0 评论   |   0 浏览

表生命周期

语法

日志表没有自动过期功能,为了防止历史日志数据占用大量磁盘空间,可以手动为每张query_log表设定TTL(这边根据需求设置默认为15天)。

ALTER TABLE system.query_log MODIFY TTL event_date + INTERVAL 15 DAY;

DateTime字段

event_date的字段类型需要为date_time,如:

CREATE TABLE example_table
(
    d DateTime,
    b String
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(d)
ORDER BY d;

列TTL

ALTER TABLE example_table
    MODIFY COLUMN
    c String TTL d + INTERVAL 1 DAY;

表TTL

ALTER TABLE example_table
    MODIFY TTL d + INTERVAL 1 DAY;

分区

创建分区

建表时,增加 partition by字段,示例如下:

create table tb_city(
id UInt8,
name String,
birthday DateTime,
city String
)engine=MergeTree()
partition by (city)
order by id;

查看分区

查看分区数据

select table,name,partition from system.parts where table='tb_partition'

删除分区

alter table tb_city drop partition 'HZ';

合并分区

optimize table tb_city;

分区其它操作

复制分区

alter table tb_city_back replace partition 'SH' from tb_city;

分区的装载和卸载
分区的卸载

alter table tb_city detach partition 'SH';

分区的装载

alter table tb_city attach partition 'SH';

参考