操作系统:中标麒麟高级服务器操作系统软件V7.0U6
部署虚拟机:VMware® Workstation 12 Pro
DM8安装包:培训试用版
DM8安装路径:/dm8
DM8用户:dmdba:dinstall
数据库实例名:DMSERVER
已新建用户:DMTEST
本文介绍使用达梦管理工具创建分区表。
达梦数据库提供了垂直分区和水平分区两种类型的分区表,本文主要介绍水平分区表。
水平分区表有以下四种类型:
范围分区:分区列是数字或日期类型。例1,数据表中某列是年龄,范围为0~120,那么可以按年龄分区,设置不同年龄的数据在不同子表中。例2,数据表中某列是年,范围为’1900-01-01’~最新,那么可以设置不同时期的数据在不同的子表中。
列表分区:分区列是字符串类型。例如:数据表中某列是地区,如,北京、上海、广州、深圳等,那么可以设置不同地区的数据在不同的子表中。
哈希分区:分区列没有限制。当列的值没有合适的分类条件时,建议使用。哈希分区是通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O 设备上进行散列分区,使得这些分区大小一致。
间隔分区:实际上是范围分区的一个扩展。以一个区间分区表为“起点”,并在定义中增加了一个规则(即间隔),使数据库知道将来如何增加分区,在数据插入的时候,如果没有适合该数据的分区,数据库会自动创建一个新的分区。
组合分区:也称为多级分区表。如果一次分区不能精确地对数据分类,则可以进行多级分区。达梦最多支持八级多级分区。
应启动达梦管理工具,并连接数据库实例。(具体操作请查询其他博文)
新建表操作:
创建用户DMTEST后,默认生成了同名的模式。
选择模式下的DMTEST,右键,选择新建表,开始新建分区表。
弹出新建表对话框,设置表名,和列。
以下将新建5个表,来分别介绍分区表设置:
SALES1:范围分区
SALES2:列表分区
SALES3:哈希分区
SALES4:间隔分区
SALES5:组合分区
1、分区表设置----范围分区
新建表切换到分区,选择创建为分区表,分区类型选择水平分区。如下图:
1.1、添加分区,选择列
点击添加分区按钮,弹出新建分区对话框。
分区类型选择范围分区,选择列,勾选SALE_DATE列,然后点击确定按钮,
1.2、添加分区项
点击添加分区项按钮,切换到设置分区项页签。
可修改分区名,也可使用默认分区名。
PART_1表达式设置格式:’2000-01-01’,即2000年1月1日前的数据都存放在PART_1分区表中;
PART_2表达式设置格式:’2010-01-01’,即2000年1月1日和2010年1月1日之间的数据存放在PART_2分区表中;
PART_MAX表达式设置格式:MAXVALUE,即2010年1月1日之后的数据都存放在PART_MAX分区表中。
1.3、查看DDL语句
create table"DMTEST"."SALES"
(
"PKID" INTEGER not null ,
"NAME" VARCHAR(50),
"SALE_DATE" DATE not null ,
"ACCOUNT" INTEGER,
"REGION" VARCHAR(20) not null ,
primary key("PKID","SALE_DATE")
)
PARTITION BY RANGE ("SALE_DATE")
(
PARTITION"PART_1" VALUES LESS THAN ('2001-01-01') STORAGE( initial1, next1, minextents1, fillfactor0, on"DMTEST01"),
PARTITION"PART_2" VALUES LESS THAN ('2010-01-01') STORAGE( initial1, next1, minextents1, fillfactor0, on"DMTEST01"),
PARTITION"PART_MAX" VALUES LESS THAN (MAXVALUE) STORAGE( initial1, next1, minextents1, fillfactor0, on"DMTEST02")
)
storage(initial1, next1, minextents1, fillfactor0, on"DMTEST01");
1.4、新建分区表
可使用DDL语句创建分区表,也可在对话框界面创建分区表。
如下图,可以看到创建了SALES表,该表与普通表不同,有子表。
2、分区表设置----列表分区
添加分区,分区表类型选择为列表分区,分区列设置为REGION。
2.1、添加分区项
PART_1表达式设置格式:'武汉','北京','上海',即REGION列中数据为这三个地区的都存放在PART_1分区表中;
PART_2表达式设置格式:'南京','西安','成都',即REGION列中数据为这三个地区的都存放在PART_2分区表中;
PART_3表达式设置格式:DEFAULT,即REGION列中数据不为PART_1和PART_2的地区的都存放在PART_3分区表中。
如下图。
2.2、查看DDL语句
create table"DMTEST"."SALES2"
(
"PKID" CHAR(10) not null ,
"NAME" CHAR(10),
"SALE_DATE" CHAR(10) not null ,
"ACCOUNT" CHAR(10),
"REGION" CHAR(10) not null ,
primary key("PKID","REGION")
)
PARTITION BY LIST ("REGION")
(
PARTITION"PART_1" VALUES ('武汉','北京','上海'),
PARTITION"PART_2" VALUES ('南京','西安','成都'),
PARTITION"PART_3" VALUES (DEFAULT) STORAGE( initial1, next1, minextents1, fillfactor0, on"DMTEST02")
)
storage(initial1, next1, minextents1, fillfactor0);
2.3、新建分区表
可使用DDL语句创建分区表,也可在对话框界面创建分区表。
3、分区表设置----哈希分区
添加分区,分区表类型选择为哈希分区,分区列设置为ACCOUNT,哈希分区数为16。
哈希分区不需要添加分区项。
3.1、查看DDL
create table"DMTEST"."SALES3"
(
"PKID" INTEGER,
"NAME" VARCHAR(50),
"SALE_DATE" DATE,
"ACCOUNT" INTEGER,
"REGION" VARCHAR(50)
)
PARTITION BY HASH ("ACCOUNT")
PARTITIONS 16
storage(initial1, next1, minextents1, fillfactor0);
3.2、新建分区表
可使用DDL语句创建分区表,也可在对话框界面创建分区表。
4、分区表设置----间隔分区
添加分区,分区表类型选择为范围分区,分区列设置为SALE_DATE。
间隔表达式:
按1年设置间隔:NUMTOYMINTERVAL(1,'year')
按1月设置间隔:NUMTOYMINTERVAL(1,'month')
说明:不支持按天设置间隔
如下图间隔表达式是按10年为间隔
4.1、添加分区项
PART_1表达式设置格式:’2000-01-01’,即2000年1月1日前的数据都存放在PART_1分区表中;
4.2、查看DDL
CREATE TABLE"DMTEST"."SALES4"
(
"PKID" INTEGER NOT NULL,
"NAME" VARCHAR(50),
"SALE_DATE" DATE NOT NULL,
"ACCOUNT" INTEGER,
"REGION" VARCHAR(50) NOT NULL,
CLUSTER PRIMARY KEY("PKID","SALE_DATE"))
PARTITION BY RANGE("SALE_DATE")
INTERVAL(NUMTOYMINTERVAL(10, 'YEAR'))
(
PARTITION"PART_1" VALUES LESS THAN(DATE'2000-01-01') STORAGE(ON"DMTEST01", CLUSTERBTR)
) STORAGE(ON"DMTEST01", CLUSTERBTR) ;
4.3、新建分区表
可使用DDL语句创建分区表,也可在对话框界面创建分区表。
4.4、插入数据,测试是否可以按间隔自动新建分区表
INSERT INTODMTEST.SALES4 VALUES(1,'AAA','1999-05-10',20,'武汉');
INSERT INTODMTEST.SALES4 VALUES(1,'BBB','2005-05-10',30,'武汉');
INSERT INTODMTEST.SALES4 VALUES(1,'BBB','2008-05-10',30,'武汉');
INSERT INTODMTEST.SALES4 VALUES(1,'BBB','2035-05-10',50,'武汉');
COMMIT;
执行后,刷新表,可以看到自动创建了2个分区表,
PART_1分区表中数据:
自动创建分区中的数据:
间隔分区表创建成功。
5、分区表设置----组合分区
首先按照地区分区,然后再按照时间分区。
5.1、添加分区,分区表类型选择为列表分区,分区列设置为REGION。
5.2、继续添加分区
点击添加分区,分区表类型选择为范围分区,分区列设置为SALE_DATE
设置为:分区模板,如下图:
5.3、添加分区项
光标选择列表分区(“REGION”),点击添加分区项,设置分区。
5.4、查看DDL
create table"DMTEST"."SALES5"
(
"PKID" CHAR(10) not null ,
"NAME" CHAR(10),
"SALE_DATE" CHAR(10) not null ,
"ACCOUNT" CHAR(10),
"REGION" CHAR(10) not null ,
primary key("PKID","SALE_DATE","REGION")
)
PARTITION BY LIST ("REGION")
SUBPARTITION BY RANGE ("SALE_DATE") SUBPARTITION TEMPLATE
(
SUBPARTITION"PART_1" VALUES LESS THAN ('2000-01-01'),
SUBPARTITION"PART_2" VALUES LESS THAN ('2010-01-01'),
SUBPARTITION"PART_3" VALUES LESS THAN ('2020-01-01'),
SUBPARTITION"PART_MAX" VALUES LESS THAN (MAXVALUE)
)
(
PARTITION"PART_1" VALUES ('武汉','北京','上海'),
PARTITION"PART_2" VALUES ('南京','西安','成都'),
PARTITION"PART_N" VALUES (DEFAULT)
)
storage(initial1, next1, minextents1, fillfactor0);
5.5、新建分区表
可使用DDL语句创建分区表,也可在对话框界面创建分区表。如下图:
5.6、插入数据,测试是否可以按间隔自动新建分区表
INSERT INTODMTEST.SALES5 VALUES(1,'AAA','1999-05-10',20,'武汉');
INSERT INTODMTEST.SALES5 VALUES(1,'BBB','2005-05-10',30,'北京');
INSERT INTODMTEST.SALES5 VALUES(1,'CCC','2008-05-10',40,'西安');
INSERT INTODMTEST.SALES5 VALUES(1,'CCC','2021-05-10',50,'西安');
INSERT INTODMTEST.SALES5 VALUES(1,'DDD','2011-05-10',60,'兰州');
INSERT INTODMTEST.SALES5 VALUES(1,'DDD','2015-05-10',70,'乌鲁木齐');
COMMIT;
查看子分区内数据,数据存储正确。