968
阿里云
range分区__分区_SQL语法参考_云数据库 OceanBase-阿里云
语法
...
PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
(partition_definition [, partition_definition] ...)
partition_definition:
PARTITION partitionname
VALUES {LESS THAN {(expr | value_list) | MAXVALUE}
举例
按照 RANGE 分区的表是通过如下一种方式进行分区的,每个分区包含那些分区表达式的值位于一个给定的连续区间内的行。在下面的几个例子中,假定你创建了一个如下的一个表,该表保存有 20 家音像店的职员记录,这20家音像店的编号从1到20。
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT NOT NULL,
store_id INT NOT NULL
);
根据你的需要,这个表可以有多种方式来按照区间进行分区。一种方式是使用store_id 列。例如,你可能决定通过添加一个PARTITION BY RANGE子句把这个表分割成4个区间,如下所示:
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT NOT NULL,
store_id INT NOT NULL
)
PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN (21)
);
按照这种分区方案,在商店 1 到 5 工作的雇员相对应的所有行被保存在分区 P0中,商店 6 到 10雇员保存在 P1 中,依次类推。注意,每个分区都是按顺序进行定义,从最低到最高。这是 PARTITION BY RANGE 语法的要求;在这点上,它类似于C或Java中的“switch … case”语句。
对于包含数据(72, ‘Michael’, ‘Widenius’, ‘1998-06-25’, NULL, 13)的一个新行,可以很容易地确定它将插入到 p2 分区中,但是如果增加了一个编号为第 21的商店,将会发生什么呢?在这种方案下,由于没有规则把 store_id 大于 20 的商店包含在内,服务器将不知道把该行保存在何处,将会导致错误。 要避免这种错误,可以通过在 CREATE TABLE 语句中使用一个“catchall” VALUES LESS THAN 子句,该子句提供给所有大于明确指定的最高值的值:
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT NOT NULL,
store_id INT NOT NULL
)
PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
MAXVALUE 表示最大的可能的整数值。现在,store_id 列值大于或等于 16(定义了的最高值)的所有行都将保存在分区 p3 中。在将来的某个时候,当商店数已经增长到 25, 30, 或更多,可以使用ALTER TABLE 语句为商店 21-25, 26-30,等等增加新的分区。
在几乎一样的结构中,你还可以基于雇员的工作代码来分割表,也就是说,基于job_code 列值的连续区间。例如,假定 2 位数字的工作代码用来表示普通(店内的)工人,三个数字代码表示办公室和支持人员,四个数字代码表示管理层,你可以使用下面的语句创建该分区表:
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT NOT NULL,
store_id INT NOT NULL
)
PARTITION BY RANGE (job_code) (
PARTITION p0 VALUES LESS THAN (100),
PARTITION p1 VALUES LESS THAN (1000),
PARTITION p2 VALUES LESS THAN (10000)
);
在这个例子中, 店内工人相关的所有行将保存在分区 p0 中,办公室和支持人员相关的所有行保存在分区 p1 中,管理层相关的所有行保存在分区 p2 中。
在 VALUES LESS THAN 子句中使用一个表达式也是可能的。这里最值得注意的限制是必须能够计算表达式的返回值作为LESS THAN (<)比较的一部分;因此,表达式的值不能为NULL 。由于这个原因,雇员表的hired, separated, job_code和store_id列已经被定义为非空(NOT NULL)。
除了可以根据商店编号分割表数据外,你还可以使用一个基于两个 DATE(日期)中的一个的表达式来分割表数据。例如,假定你想基于每个雇员离开公司的年份来分割表,也就是说,YEAR(separated)的值。实现这种分区模式的 CREATE TABLE 语句的一个例子如下所示:
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY RANGE (YEAR(separated)) (
PARTITION p0 VALUES LESS THAN (1991),
PARTITION p1 VALUES LESS THAN (1996),
PARTITION p2 VALUES LESS THAN (2001),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
在这个方案中,在 1991 年前雇佣的所有雇员的记录保存在分区 p0 中,1991 年到 1995 年期间雇佣的所有雇员的记录保存在分区p1中,1996年到2000年期间雇佣的所有雇员的记录保存在分区 p2 中,2000年后雇佣的所有工人的信息保存在p3中。
使用场景
- 当需要删除“旧的”数据时。
- 想要使用一个包含有日期或时间值,或包含有从一些其他级数开始增长的值的列。
- 经常运行直接依赖于用于分割表的列的查询。
最后更新:2016-11-24 11:23:46
上一篇:
OceanBase SQL简介__SQL语法参考_云数据库 OceanBase-阿里云
下一篇:
hash分区__分区_SQL语法参考_云数据库 OceanBase-阿里云
数据追踪与回滚__应用场景_产品简介_数据管理-阿里云
查询访问QPS__资源监控接口_API 手册_CDN-阿里云
ApiSignatureItem__数据类型_API_API 网关-阿里云
删除快照__快照_用户指南_云服务器 ECS-阿里云
支持的服务列表__产品简介_操作审计-阿里云
监控指标参考手册__监控服务_开发人员指南_对象存储 OSS-阿里云
购买指导___视频点播-阿里云
添加加速域名__域名操作接口_API 手册_CDN-阿里云
【推荐】ECS Windows开启内核转储(Core Dump)配置说明__蓝屏夯机_操作系统类问题_Windows操作运维问题_云服务器 ECS-阿里云
协议跟随回源__内容回源设置_用户指南_CDN-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云