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")  ...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM