暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AUTO模式的List类型

酷数据库 2023-09-14
330

与Range类型类似,PolarDB-X将List分区策略进一步细分为List分区与List Columns分区两种类型。List分区与List Columns分区属于原生MySQL的标准分区语法。此外,PolarDB-X的List分区和List Columns分区还支持Default分区。List Columns分区与List分区的使用区别如下表所示:

表 3. List Columns分区策略与List分区策略对比
分区策略分区键支持是否支持分区函数语法示例特点与限制路由描述(点查)
List Columns单列分区键& 向量分区键PARTITION BY LIST COLUMNS (c1,c2,...,cn) ( PARTITION p1 VALUES IN ((1,10,...,1000),(2,20,...,2000) ), PARTITION p2 VALUES IN ((3,30,...,3000),(3,30,...,3000) ), ...)不支持热点分裂
  1. (c1,c2,...,cn)这N个列的值组成一组分区键向量;
  2. 根据这个分区键向量(c1,c2,...,cn)按二分查找算法判断它属于哪个预定义分区,并最终路由到目标分区。
List单列分区键PARTITION BY LIST(YEAR(c1)) ( PARTITION p1 VALUES IN (2018,2019), PARTITION p2 VALUES IN (2020,2021) ...)不支持热点分裂。

示例3-1:List Columns分区

List Columns分区支持使用向量分区键。例如,业务可以按订单的国家country与城市city进行List Columns分区, 建表语法如下所示:


CREATE TABLE orders_region(
 id int,
 country varchar(64),
 city varchar(64),
 order_time datetime not null)
PARTITION BY LIST COLUMNS(country,city)
(
  PARTITION p1 VALUES IN (('China','Hangzhou'), ('China','Beijing')),
  PARTITION p2 VALUES IN (('United States','NewYork'),('United States','Chicago')),
  PARTITION p3 VALUES IN (('Russian','Moscow'))
);

重要

目前List Columns分区不支持使用TIMESTAMP/TIME等与时区相关的类型作为分区键。

示例3-2:List分区

List分区只支持单列分区健,但对于时间类型的分区列,它支持分区函数表达式(例如YEAR/MONTH/DAYOFMONTH/TO_DAYS/TO_SECONDS等)来将时间类型转换成整数类型。

例如,业务想按订单日期order_time的年份进行List分区, 则可以使用以下语法建表:


CREATE TABLE orders_years(
 id int,
 country varchar(64),
 city varchar(64),
 order_time datetime not null)
PARTITION BY LIST(YEAR(order_time))
(
  PARTITION p1 VALUES IN (1990,1991,1992,1993,1994,1995,1996,1997,1998,1999),
  PARTITION p2 VALUES IN (2000,2001,2002,2003,2004,2005,2006,2007,2008,2009),
  PARTITION p3 VALUES IN (2010,2011,2012,2013,2014,2015,2016,2017,2018,2019)
);

重要

目前List仅支持使用整数类型作为分区键,另外要值得注意的是,也不支持直接使用字符串类型作为分区列。

示例3-3:带Default的List Columns分区和List分区

PolarDB-X支持创建带default的List Columns分区和List分区,普通分区中未定义的数据将被路由至default分区。

重要

最多只允许定义一个default分区,且default分区只允许出现在最后一个分区位置。


CREATE TABLE orders_region(
 id int,
 country varchar(64),
 city varchar(64),
 order_time datetime not null)
PARTITION BY LIST COLUMNS(country,city)
(
  PARTITION p1 VALUES IN (('China','Hangzhou'), ('China','Beijing')),
  PARTITION p2 VALUES IN (('United States','NewYork'),('United States','Chicago')),
  PARTITION p3 VALUES IN (('Russian','Moscow')),
  PARTITION pd VALUES IN (DEFAULT)
);

CREATE TABLE orders_years(
 id int,
 country varchar(64),
 city varchar(64),
 order_time datetime not null)
PARTITION BY LIST(YEAR(order_time))
(
  PARTITION p1 VALUES IN (1990,1991,1992,1993,1994,1995,1996,1997,1998,1999),
  PARTITION p2 VALUES IN (2000,2001,2002,2003,2004,2005,2006,2007,2008,2009),
  PARTITION p3 VALUES IN (2010,2011,2012,2013,2014,2015,2016,2017,2018,2019),
  PARTITION pd VALUES IN (DEFAULT)
);

相关限制

  • 数据类型限制
    • 整数类型: BIGINT/BIGINT UNSINGEDINT/INT/INT UNSINGED/MEDIUMINT/MEDIUMINT UNSINGED/SMALLINT/SMALLINT UNSINGED/TINYINT/TINYINT UNSINGED;
    • 时间类型:DATETIME/DATE;
    • 字符串类型:CHAR/VARCHAR。
  • 语法限制
    • List Columns分区目前还不支的使用TIMESTAMP类型;
    • List分区仅支持整数类型;
    • List Columns分区与List分区均不支持热点分裂;
    • 默认最大分区数目不允许超过8192个;
    • 默认最大分区列数目不允许超过5个。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论