openGauss SQL参考—分区表(1)
分区表
一张表内的数据过多时,就会严重影响到数据的查询和操作效率。openGauss支持把一张表从逻辑上分成多个小的分片,从而避免一次处理大量数据,提高处理效率。
openGauss数据库支持这些划分类型:
- 范围分区表:指定一个或多个列划分为多个范围,每个范围创建一个分区,用来存储相应的数据。例如可以采用日期划分范围,将销售数据按照月份进行分区。
- 列表分区表:直接按照一个列或者多个列上的值来划分出分区。例如可以采用销售门店划分销售数据。
- 间隔分区表:是一种特殊的范围分区,新增了间隔值定义。当插入记录找不到匹配的分区时可以根据间隔值自动创建分区。
- 哈希分区表:根据表的一列,为每个分区指定模数和余数,将要插入表的记录划分到对应的分区中。
分区表的操作除了创建之外还有:
- 查询分区表:按照分区名或者分区中的值查询数据。
- 导入数据:直接导入数据或从现有表格中导入。
- 修改分区表:包括增加分区、删除分区、切割分区、合并分区,以及修改分区名称等。
- 删除分区表:与删除普通表格相同。
范围分区表的分类
范围分区表按照划分范围的方式,分为以下类别:
- VALUES LESS THAN:通过给出每个分区的上限来确定分区范围。上个分区的上限<=分区的范围<本分区的上限。
- START END:通过以下方式划分:
- 分区的起点和终点;
- 仅给出分区起点;
- 仅给出分区终点;
- 给出分区起点和终点后,再给出该范围内的间隔值。
- 以上这些方式的综合应用。
创建VALUES LESS THAN范围分区表语法格式
CREATE TABLE partition_table_name
( [column_name data_type ]
[, ... ]
)
PARTITION BY RANGE (partition_key)
(
PARTITION partition_name VALUES LESS THAN (partition_value | MAXVALUE)
[, ... ]
);
创建VALUES LESS THAN范围分区表参数说明
-
partition_table_name
分区表的名称。
-
column_name
新表中要创建的字段名。
-
data_type
字段的数据类型。
-
partition_key
partition_key为分区键的名称。
对于从句是VALUE LESS THAN的语法格式,范围分区策略的分区键最多支持4列。
-
partition_name
partition_name为范围分区的名称。
-
VALUES LESS THAN
分区中的数值必须小于上边界值。
-
partition_value
partition_value为范围分区的上边界,取值依赖于partition_key的类型。
-
MAXVALUE
MAXVALUE表示分区的上边界,它通常用于设置最后一个范围分区的上边界。
创建VALUES LESS THAN范围分区表示例
示例1:创建范围分区表sales_table,含有4个分区,分区键为DATE类型。分区的范围分别为:sales_date<2021-04-01,2021-04-01<= sales_date<2021-07-01,2021-07-01<=sales_date< 2021-10-01,2021-10-01 <= sales_date< MAXVALUE。
--创建分区表sales_table。
openGauss=# CREATE TABLE sales_table
(
order_no INTEGER NOT NULL,
goods_name CHAR(20) NOT NULL,
sales_date DATE NOT NULL,
sales_volume INTEGER,
sales_store CHAR(20)
)
PARTITION BY RANGE(sales_date)
(
PARTITION season1 VALUES LESS THAN('2021-04-01 00:00:00'),
PARTITION season2 VALUES LESS THAN('2021-07-01 00:00:00'),
PARTITION season3 VALUES LESS THAN('2021-10-01 00:00:00'),
PARTITION season4 VALUES LESS THAN(MAXVALUE)
);
-- 数据插入分区season1
openGauss=# INSERT INTO sales_table VALUES(1, 'jacket', '2021-01-10 00:00:00', 3,'Alaska');
-- 数据插入分区season2
openGauss=# INSERT INTO sales_table VALUES(2, 'hat', '2021-05-06 00:00:00', 5,'Clolorado');
-- 数据插入分区season3
openGauss=# INSERT INTO sales_table VALUES(3, 'shirt', '2021-09-17 00:00:00', 7,'Florida');
-- 数据插入分区season4
openGauss=# INSERT INTO sales_table VALUES(4, 'coat', '2021-10-21 00:00:00', 9,'Hawaii');

浙公网安备 33010602011771号