doris 动态分区

下面是个人测试例子:详细请参考官网(特别详细):http://doris.incubator.apache.org/master/zh-CN/administrator-guide/dynamic-partition.html#%E7%A4%BA%E4%BE%8B

PARTITIONS 分区的基本操作:
官网:http://doris.incubator.apache.org/master/zh-CN/administrator-guide/alter-table/alter-table-temp-partition.html#%E8%A7%84%E5%88%99

查看分区:   

SHOW TEMPORARY PARTITIONS FROM tb_user; //临时分区
SHOW PARTITIONS FROM tb_user; 

添加临时分区:

ALTER TABLE tbl1 ADD TEMPORARY PARTITION tp1 VALUES LESS THAN("2020-02-01");

ALTER TABLE tbl2 ADD TEMPORARY PARTITION tp1 VALUES [("2020-01-01"), ("2020-02-01"));

ALTER TABLE tbl1 ADD TEMPORARY PARTITION tp1 VALUES LESS THAN("2020-02-01")
("in_memory" = "true", "replication_num" = "1")
DISTRIBUTED BY HASH(k1) BUCKETS 5;

删除临时分区

可以通过 ALTER TABLE DROP TEMPORARY PARTITION 语句删除一个表的临时分区:

     

原理

在某些使用场景下,用户会将表按照天进行分区划分,每天定时执行例行任务,这时需要使用方手动管理分区,否则可能由于使用方没有创建分区导致数据导入失败,这给使用方带来了额外的维护成本。

在实现方式上, FE会启动一个后台线程,根据fe.conf中dynamic_partition_enable 及 dynamic_partition_check_interval_seconds参数决定该线程是否启动以及该线程的调度频率。每次调度时,会在注册表中读取动态分区表的属性,并根据动态分区属性动态添加及删除分区。
建表时,可以在 PROPERTIES 中指定以下dynamic_partition属性,表示这个表是一个动态分区表。

实例:

CREATE TABLE IF NOT EXISTS user2
(
    `siteid` INT DEFAULT '10',
    `citycode` INT,
    `username` VARCHAR(32) DEFAULT ''
)
ENGINE=olap
PARTITION BY RANGE (`citycode`)
(
PARTITION p20210605 VALUES LESS THAN ("20210606"),
PARTITION p20210606 VALUES LESS THAN ("20210607"),
PARTITION p20210607 VALUES LESS THAN ("20210608"),
PARTITION p20210608 VALUES LESS THAN ("20210609")
)
DISTRIBUTED BY HASH(siteid) 
BUCKETS 5
PROPERTIES(
"replication_num" = "2",
"storage_medium" = "SSD",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-3",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "10"
 );

创建一张动态分区表,指定开启动态分区特性,以当天为2021-06-27为例,在每次调度时,会删除分区上界小于 2021-06-07 的分区,为了避免删除非动态创建的分区,动态删除分区只会删除分区名符合动态创建分区规则的分区,例如分区名为a1, 则即使分区范围在待删除的分区范围内,也不会被删除。同时在调度时会提前创建今天以及以后3天(总共4天)的分区(若分区已存在则会忽略),分区名根据指定前缀分别为p20210607 p20210608  p20210609  p20210610,每个分区的分桶数量为32。同时会删除 p20210603 的分区。

如果没有设置 dynamic_partition.start,则不会删除历史分区

test :      

insert into user2 values(1,20210607,"sea1")
insert into user2 values(2,20210608,"sea2")
insert into user2 values(3,20210609,"sea3")
insert into user2 values(4,202106010,"sea4")  ...

原文地址:https://www.cnblogs.com/lshan/p/14863510.html