分区表操作

1、删除分区

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';

分区表操作_第1张图片

-- 删除分区
alter table test_partition1 drop partition '202304' ;

删除分区以后 , 分区中的所有的数据全部删除 

SELECT name,
       table,
       partition
FROM system.parts
WHERE table = 'test_partition1'

SELECT * FROM test_partition1

2、复制分区

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';

3、重置分区数据

如果数据表某⼀列的数据有误,需要将其重置为初始值,如果设置了默认值那么就是默认值数据,如果没有设置默认值,系统会给出默认的初始值,此时可以使⽤下⾯的语句实现:

ALTER TABLE tb_name CLEAR COLUMN column_name IN PARTITION partition_expr ;

注意: 不能重置主键和分区字段

alter table test_rep clear column xxx in partition '202105' ;

4、卸载分区

表分区可以通过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语句重新装载;

你可能感兴趣的:(clickhosue)