LIST分區(qū)
語法
枚舉類型分區(qū),需要枚舉出每個分區(qū)的分區(qū)鍵的值,枚舉值不能重復(fù),并支持使用DEFAULT值定義 "catch-all" 分區(qū)。
CREATE TABLE ...
PARTITION BY LIST(partition_expr) [PARTITIONS number]
(
PARTITION part_name VALUES IN (list_bound_value_set),
PARTITION part_name VALUES IN (list_bound_value_set),
...
)
partition_expr:
partition_column
| partition_func(partition_column)
list_bound_value_set:
list_bound_value[, list_bound_value, list_bound_value, ...]
# 分區(qū)函數(shù)定義
partition_func:
YEAR
| TO_DAYS
| TO_MONTHS
| TO_WEEKS
| TO_SECOND
| UNIX_TIMESTAMP
| MONTH
| DAYOFWEEK
| DAYOFMONTH
| DAYOFYEAR
| SUBSTR
| SUBSTRING
| RIGHT
| LEFT
LIST分區(qū)策略與LIST COLUMNS分區(qū)策略的區(qū)別請參見List Columns分區(qū)策略與List分區(qū)策略對比。
限制
List分區(qū)的單列分區(qū)鍵支持使用分區(qū)函數(shù),但不同分區(qū)函數(shù)對分區(qū)列的數(shù)據(jù)類型有不同要求。
LIst分區(qū)的向量分區(qū)鍵不允許使用分區(qū)函數(shù)。
分區(qū)列使用分區(qū)函數(shù)時,不允許嵌套多層的分區(qū)函數(shù)。
默認(rèn)最大分區(qū)數(shù)目不允許超過8192。
默認(rèn)最大分區(qū)列數(shù)目不允許超過5個。
所有分區(qū)的名字不能重復(fù),長度默認(rèn)不超過16個字符。
使用TIMESTAMP等時區(qū)敏感的數(shù)據(jù)類型作為分區(qū)列時,該分區(qū)列必須配套地使用UNIX_TIMESTAMP分區(qū)函數(shù)。
示例
使用分區(qū)函數(shù)
使用單列分區(qū)鍵datetime并通過分區(qū)函數(shù)to_days轉(zhuǎn)換為日期天數(shù),再進(jìn)行列表分區(qū)。
CREATE TABLE tb_l_fn(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY LIST(TO_DAYS(birthday))
(
PARTITION p1 VALUES IN (TO_DAYS('2020-01-01'),TO_DAYS('2020-02-01')),
PARTITION p2 VALUES IN (TO_DAYS('2021-01-01'),TO_DAYS('2021-02-01')),
PARTITION p3 VALUES IN (TO_DAYS('2022-01-01')),
PARTITION pm VALUES IN (DEFAULT)
)
其它分區(qū)函數(shù)的用法,請參見分區(qū)函數(shù)。
不使用分區(qū)函數(shù)
使用單列分區(qū)鍵id進(jìn)行列表分區(qū),并指定分區(qū)數(shù)目為8。
CREATE TABLE tb_l(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY LIST(id)
(
PARTITION p1 VALUES IN (1000,1001,1002),
PARTITION p2 VALUES IN (2000,2001,2002),
PARTITION p3 VALUES IN (3000),
PARTITION pm VALUES IN (DEFAULT)
)
使用向量分區(qū)鍵
當(dāng)LIST分區(qū)使用向量分區(qū)鍵進(jìn)行定義時,它自動會轉(zhuǎn)換為LIST COLUMNS分區(qū)。例如按birthday、id兩列進(jìn)行列表分區(qū)(如下所示):
CREATE TABLE tb_l(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY LIST(birthday,id)
(
PARTITION p1 VALUES IN(('1990-04-03',1000),('1991-04-03',2000)),
PARTITION p2 VALUES IN(('2000-01-03',3000),('2001-04-03',3001)),
PARTITION pm VALUES IN(DEFAULT)
)
上述的LIST分區(qū)定義會自動轉(zhuǎn)換為使用LIST COLUMNS分區(qū)定義(如下所示):
CREATE TABLE tb_l(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY LIST COLUMNS(birthday,id)
(
PARTITION p1 VALUES IN(('1990-04-03',1000),('1991-04-03',2000)),
PARTITION p2 VALUES IN(('2000-01-03',3000),('2001-04-03',3001)),
PARTITION pm VALUES IN(DEFAULT)
)
數(shù)據(jù)類型限制
整數(shù)類型: BIGINT/BIGINT UNSINGEDINT/INT/INT UNSINGED/MEDIUMINT/MEDIUMINT UNSINGED/SMALLINT/SMALLINT UNSINGED/TINYINT/TINYINT UNSINGED
時間類型:DATETIME/DATE/TIMESTAMP
字符串類型:CHAR/VARCHR