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-阿裏雲