创建和管理分区表
本文档概述了如何在 Apache Cloudberry 中使用推荐的语法创建和维护分区表。
有关分区表的更多信息,请参阅关于表分区。
创建分区表
在创建分区表之前,您应该:
- 选择分区方法:范围、列表或哈希。
- 选择分区键的列。
- 确定适当的分区数量和级别(如果使用多级分区)。
- 创建分区表。
- 创建单独的分区。
Apache Cloudberry 会自动创建描述分区边界条件的约束。任何插入到根分区表中的数据,只要符合某个分区的约束,就会被定向到该分区。
对于子分区,如有必要,可以使用相同的分区键列(例如,按月分区,然后按天子分区)。考虑直接按最细粒度级别进行分区(例如,365 个每日分区,而不是按年、月、天),因为扁平分区设计通常运行更快,尽管多级设计可以减少查询规划时间。
定义日期范围分区表
日期范围分区表使用 date
或 timestamp
列作为分区键。您可以为范围分区表指定多个分区键列。
示例:为一家冰淇淋公司创建一个 measurement
表,按 logdate
列按月分区,以保留两年的数据并每月删除最旧月份的数据。
-
创建根分区表:
CREATE TABLE measurement (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
)
DISTRIBUTED BY (city_id)
PARTITION BY RANGE (logdate); -
创建分区(例如,每个月):
CREATE TABLE measurement_y2021m01 PARTITION OF measurement
FOR VALUES FROM ('2021-01-01') TO ('2021-02-01');
CREATE TABLE measurement_y2021m02 PARTITION OF measurement
FOR VALUES FROM ('2021-02-01') TO ('2021-03-01');
-- ... 其他月份以此类推 ...
CREATE TABLE measurement_y2022m12 PARTITION OF measurement
FOR VALUES FROM ('2022-12-01') TO ('2023-01-01') -- 注意:原文此处可能为笔误,应为 '2023-01-01'
TABLESPACE fasttablespace;
CREATE TABLE measurement_y2023m01 PARTITION OF measurement
FOR VALUES FROM ('2023-01-01') TO ('2023-02-01')
WITH (parallel_workers = 4)
TABLESPACE fasttablespace;范围上限被视为独占。如果插入到父表中的数据没有映射到现有分区,Apache Cloudberry 将返回错误(除非存在默认分区)。