ClickHouse 分区的操作和理解
目录
一、ClickHouse分区注意事项
分区比较适合用于数据的删除、更新与迭代,并不适用于加速查询。生产中更适合做大数据量的迭代更新删除,其分区操作能明显减轻直接drop table对ClickHouse集群造成的压力。前文提到的重命名热更新的方式,再超大数据量的前提下去做迭代更新删除避免不了要copy to copy HardDisk IO,磁盘真空期过长。
that partitioning is not intended to speed up SELECT queries (ORDER BY key is sufficient to make range queries fast). Partitions are intended for data manipulation (DROP PARTITION, etc)
二、clickhouse-client客户端容器
1 |
docker run -it --rm --network=clickhouse-network --link clickhouse01:clickhouse-server yandex/clickhouse-client --host clickhouse-server --port 9000 |
三、创建cppla数据库
1 |
create database cppla on cluster company_cluster; |
四、创建消息msg_local库表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 按dt日期索引,且指定按天分区为dt # 指定分区过期时间为365天 # use_minimalistic_part_header_in_zookeeper 减轻zookeeper压力 CREATE TABLE IF NOT EXISTS cppla.msg_local on cluster company_cluster( `msgtime` Nullable(String) COMMENT '消息时间', `msgcontent` Nullable(String) COMMENT '消息内容', `dt` Date COMMENT '消息分区' ) ENGINE = ReplicatedMergeTree( '/clickhouse/tables/{shard}/cppla_msg_local_1', '{replica}' ) PARTITION BY dt ORDER BY (dt) TTL dt + toIntervalDay(365) SETTINGS index_granularity = 8192, use_minimalistic_part_header_in_zookeeper = 1 |
五、插入数据测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 过期数据,已经插入但是被标记为删除掉了 insert into msg_local values('2019-07-28 01:22:03','这是一条过期数据','2019-07-28 01:22:03'); # 正常数据 insert into msg_local values('2021-07-28 01:22:03','这是一条正常数据','2021-07-28 01:22:03'); insert into msg_local values('2021-07-27 01:22:03','这是b条正常数据','2021-07-27 01:22:03'); insert into msg_local values('2021-07-26 01:22:03','这是c条正常数据','2021-07-26 01:22:03'); insert into msg_local values('2021-07-25 01:22:03','这是d条正常数据','2021-07-25 01:22:03'); insert into msg_local values('2021-07-24 01:22:03','这是e条正常数据','2021-07-24 01:22:03'); # 查询结果 select count(*) from msg_local; Result: 5 |
六、卸载分区
1 2 3 4 5 |
# 卸载7月25日数据,做迭代更新。 ALTER TABLE cppla.msg_local DETACH PARTITION '2021-07-25'; # 卸载7月27日数据,比如说闲置,数据恢复,或暂时不用于分析等等。 ALTER TABLE cppla.msg_local DETACH PARTITION '2021-07-27'; |
七、删除分区和数据迭代
1 2 3 4 5 6 7 |
# 数据迭代 insert into msg_local values('2021-07-25 01:22:20','这是条7月25日迭代更新后的数据','2021-07-25 01:22:20'); # 删除旧分区数据 ALTER TABLE cppla.msg_local DROP DETACHED PARTITION '2021-07-25'; |
八、装载分区
1 2 3 |
# 装载7月27日分区的数据 ALTER TABLE cppla.msg_local ATTACH PARTITION '2021-07-27'; |
很方便有没有。 转载注明:https://cpp.la/595.html
One Reply to “ClickHouse 分区的操作和理解”