CREATE TABLE test_partition1
(
`id` String,
`ctime` DateTime
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(ctime)
ORDER BY id
SETTINGS index_granularity = 8192 -- 索引粒度 稀疏索引
-- 插⼊数据
insert into test_partition1 values(1,now()) ,(2,'2021-06-11 11:12:13') ;
-- INSERT INTO default.test_partition1 (id, ctime) VALUES ('1', '2023-04-08 07:59:59');
-- INSERT INTO default.test_partition1 (id, ctime) VALUES ('2', '2021-06-11 11:12:13');
SELECT * FROM test_partition1 ;
select name,
table,
partition
from system.parts
where table = 'test_partition1';
insert into test_partition1 values(1,now()) ,(2,'2021-06-12 11:12:13') ;
select name,
table,
partition
from system.parts
where table = 'test_partition1';
-- 删除分区
alter table test_partition1 drop partition '202304' ;
删除分区以后 , 分区中的所有的数据全部删除
SELECT name,
table,
partition
FROM system.parts
WHERE table = 'test_partition1'
SELECT * FROM test_partition1
create table tb_y as tb_x ;
clickHouse⽀持将A表的分区数据复制到B表,这项特性可以⽤于快速数据写⼊、多表间数据同步和备份等场景,它的完整语法如下:
ALTER TABLE B REPLACE PARTITION partition_expr FROM A
不过需要注意的是,并不是任意数据表之间都能够相互复制,它们还需要满⾜两个前提条件:
·两张表需要拥有相同的分区键
·它们的表结构完全相同。
create table test_partition2 as test_partition1;
show create table test_partition2; -- 查看表2的建表语句
CREATE TABLE default.test_partition2
(
`id` String,
`ctime` DateTime
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(ctime)
ORDER BY id
SETTINGS index_granularity = 8192;
-- 两张表的结构完全⼀致
-- 复制⼀张表的分区到另⼀张表中
alter table test_partition2 replace partition '202106' from test_partition1
select * from test_partition2;
select name,
table,
partition
from system.parts
where table = 'test_partition2';
如果数据表某⼀列的数据有误,需要将其重置为初始值,如果设置了默认值那么就是默认值数据,如果没有设置默认值,系统会给出默认的初始值,此时可以使⽤下⾯的语句实现:
ALTER TABLE tb_name CLEAR COLUMN column_name IN PARTITION partition_expr ;
注意: 不能重置主键和分区字段
alter table test_rep clear column xxx in partition '202105' ;
表分区可以通过DETACH语句卸载,分区被卸载后,它的物理数据并没有删除,⽽是被转移到了当前数据表⽬录的detached⼦⽬录下。⽽装载分区则是反向操作,它能够将detached⼦⽬录下的某个分区重新装载回去。卸载与装载这⼀对伴⽣的操作,常⽤于分区数据的迁移和备份场景
alter table test_rep detach partition '202105' ;
alter table test_muta detach partition 'BJ' ;
-- 装载分区
alter table test_rep attach partition '202105' ;
alter table test_muta attach partition 'BJ' ;
-- 记住,⼀旦分区被移动到了detached⼦⽬录,就代表它已经脱离了ClickHouse的管理,ClickHouse并不会主动清理这些⽂件。这些分区⽂件会⼀直存在,除⾮我们主动删除或者使⽤ATTACH语句重新装载;