暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8a MPP Cluster 解决时间维度的分区管理

原创 manhuai 2022-09-02
319

GBase 8a MPP Cluster系列产品从V95版本开始支持分区表功能,通过使用分区表,可有效提升查询性能、降低数据维护成本。
GBase 8a支持普通分区和子分区。目前常用的分区方法有range分区、list分区、key分区、hash分区。
在实际生产环境中,经常会按照时间顺序将生产数据进行组织管理,常用年度,季度,日期作为数据切分的时间单位。此时可利用range分区或list分区对数据按照时间单位进行划分管理。
示例1:按年度进行分区管理
Create table pt (d date,i int) partition by range(year(d))
(partition p0 values less than(2000),
Partition p1 values less than(2001),
Partition p2 values less than(2002)
);
Insert into pt values('1999-1-1',1);
Insert into pt values('2000-1-1',2);
Insert into pt values('2001-1-1',3);

Select * from pt;
Select * from pt (partition p0);
Select * from pt (partition p1);
Select * from pt (partition p2);

gbase> select * from pt;
+----------------+-------+
| d | i |
+----------------+-------+
| 1999-01-01 | 1 |
| 2000-01-01 | 2 |
| 2001-01-01 | 3 |
+----------------+-------+
3 rows in set (Elapsed: 00:00:00.03)

gbase> Select * from pt partition (p0);
+----------------+-------+
| d | i |
+----------------+-------+
| 1999-01-01 | 1 |
+----------------+-------+
1 row in set (Elapsed: 00:00:00.02)

gbase> Select * from pt partition (p1);
+----------------+------+
| d | i |
+----------------+------+
| 2000-01-01 | 2 |
+----------------+------+
1 row in set (Elapsed: 00:00:00.02)

gbase> Select * from pt partition (p2);
+----------------+------+
| d | i |
+----------------+------+
| 2001-01-01 | 3 |
+----------------+------+
1 row in set (Elapsed: 00:00:00.03)

示例2: 按季度进行分区管理


Create table pt (d date,i int) partition by range(quarter(d))
(partition p0 values less than(2),
Partition p1 values less than(3),
Partition p2 values less than(4),
Partition p3 values less than(5)
);

或者使用list分区
Create table pt (d date,i int) partition by range(quarter(d))
(partition p0 values in(1),
Partition p1 values in(2),
Partition p2 values in(3),
Partition p3 values in(4)
);

示例3:按周进行分区管理

Create table pt (d date,i int) partition by range(week(d))
(partition p0 values less than(2),
Partition p1 values less than(3),
Partition p2 values less than(4),
Partition p3 values less than(5),
……
Partition p52 values less than(52)
);

示例4:按日期进行分区管理
Create table pt1 (d date,i int) partition by range(d)
(partition p0 values less than(20000101),
Partition p1 values less than(20000102),
Partition p2 values less than(20000103)
);

gbase> Insert into pt1 values('2000-1-1',1);
Query OK, 1 row affected (Elapsed: 00:00:00.20)

gbase> Insert into pt1 values('2000-1-2',1);
Query OK, 1 row affected (Elapsed: 00:00:00.21)

gbase> select * from pt1;
+------------+------+
| d | i |
+------------+------+
| 2000-01-01 | 1 |
| 2000-01-02 | 1 |
+------------+------+
2 rows in set (Elapsed: 00:00:00.07)

gbase> select * from pt1 partition (p0);
Empty set (Elapsed: 00:00:00.05)

gbase> select * from pt1 partition (p1);
+------------+------+
| d | i |
+------------+------+
| 2000-01-01 | 1 |
+------------+------+
1 row in set (Elapsed: 00:00:00.03)

gbase> select * from pt1 partition (p2);
+------------+------+
| d | i |
+------------+------+
| 2000-01-02 | 1 |
+------------+------+
1 row in set (Elapsed: 00:00:00.04)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论