全部產品
Search
文件中心

PolarDB:RANGE分區

更新時間:Jul 06, 2024

文法

按照範圍邊界進行分區,常用於按照時間邊界進行分區。分區邊界必須是遞增的,支援使用MAXVALUE作為最大邊界值。

CREATE TABLE ... 
PARTITION BY RANGE(partition_expr) [PARTITIONS number]
(
  PARTITION part_name VALUES LESS THAN (range_bound_value),
  PARTITION part_name VALUES LESS THAN (range_bound_value),
  ...
)

partition_expr:
    partition_column	
  | partition_func(partition_column)


# 分區函數定義
partition_func:
    YEAR
  | TO_DAYS
  | TO_MONTHS
  | TO_WEEKS
  | TO_SECOND
  | UNIX_TIMESTAMP
  | MONTH
  | DAYOFWEEK
  | DAYOFMONTH
  | DAYOFYEAR
  | SUBSTR
  | SUBSTRING
  | RIGHT
  | LEFT
說明

RANGE分區策略與RANGE COLUMNS分區策略的區別請參見Range Columns分區策略與Range分區策略對比

限制

  • Range分區的單列分區鍵支援使用分區函數,但不同分區函數對分區列的資料類型有不同要求。

  • Range分區的向量分區鍵不允許使用分區函數。

  • 分區列使用分區函數時,不允許嵌套多層的分區函數。

  • 所有分區的名字不能重複,長度預設不能超過16個字元。

  • 使用TIMESTAMP等時區敏感的資料類型作為分區列時,該分區列必須配套地使用UNIX_TIMESTAMP分區函數。

  • 預設最大分區數目不允許超過8192個;

  • 預設最大分區列數目不允許超過5個。

樣本

使用分區函數

使用單列分區鍵datetime並通過分區函數to_days轉換為日期天數,再進行定界分割。

CREATE TABLE tb_r_fn(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime not null,
 primary key(id)
) 
PARTITION BY RANGE(TO_DAYS(birthday))
(
   PARTITION p1 VALUES LESS THAN(TO_DAYS('2020-01-01')),
   PARTITION p2 VALUES LESS THAN(TO_DAYS('2021-01-01')),
   PARTITION p3 VALUES LESS THAN(TO_DAYS('2022-01-01')),
   PARTITION pm VALUES LESS THAN(MAXVALUE)
)

其它分區函數的用法,請參見分區函數

不使用分區函數

使用單列分區鍵id進行定界分割,並指定分區數目為8。

CREATE TABLE tb_r(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime not null,
 primary key(id)
) 
PARTITION BY RANGE(id)
(
   PARTITION p1 VALUES LESS THAN(1000),
   PARTITION p2 VALUES LESS THAN(2000),
   PARTITION p3 VALUES LESS THAN(3000),
   PARTITION pm VALUES LESS THAN(MAXVALUE)
)

使用向量分區鍵

當RANGE分區使用向量分區鍵進行定義時 ,它自動會轉換為RANGE COLUMNS分區。例如按(bid,id)兩個列進行定界分割(如下所示):

CREATE TABLE tb_r(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime not null,
 primary key(id)
) 
PARTITION BY RANGE(bid,id)
(
   PARTITION p1 VALUES LESS THAN(1,1000),
   PARTITION p2 VALUES LESS THAN(2,2000),
   PARTITION pm VALUES LESS THAN(MAXVALUE, MAXVALUE)
)

上述的RANGE分區定義會自動轉換為使用RANGE COLUMNS分區定義(如下所示):

CREATE TABLE tb_r(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime not null,
 primary key(id)
) 
PARTITION BY RANGE COLUMNS(bid,id)
(
   PARTITION p1 VALUES LESS THAN(1,1000),
   PARTITION p2 VALUES LESS THAN(2,2000),
   PARTITION pm VALUES LESS THAN(MAXVALUE, MAXVALUE)
)

資料類型限制

  • 整數類型: BIGINT/BIGINT UNSINGEDINT/INT/INT UNSINGED/MEDIUMINT/MEDIUMINT UNSINGED/SMALLINT/SMALLINT UNSINGED/TINYINT/TINYINT UNSINGED

  • 時間類型:DATETIME/DATE/TIMESTAMP

  • 字串類型:CHAR/VARCHR