本文介绍了AUTO模式数据库支持的分区函数。
名词解析
分区键:分区表中用于进行水平切分的一个列或多个列。
分区列:水平切分后,参与分区路由及计算的列,它通常是分区键的一部分,一个分区键可以含有一个或多个分区列。
向量分区键:由一个或多个分区列组成的分区键,例如
Partition by Hash(c1,c2,c3)
。单列分区键:只含一个分区列的分区键,例如
Partition by Hash(c1)
。分区函数:将分区列作为一个函数的输入参数,并将该函数的输出结果作为原始值参与路由计算,该函数被称为分区函数。例如
Partition by Hash(To_Days(c1))
。分区函数单调性:单调性描述了随着自变量x(函数的输入)增加或减少时函数的输出值func(x)变化趋势。单调性又可细分以下3种,但其中的具有严格单调性与非严格单调性的分区函数才能支持范围查询的分区裁剪:
严格单调性:对于x>y,func(x)>func(y),反之亦然;
非严格单调性:对于x>y,func(x)>=func(y),反之亦然;
没有单调性:对于x>y,不一定会出现func(x)>=func(y)。
使用限制
下表列出了PolarDB-X支持的分区函数、支持的版本、函数单调性以及分区函数支持的数据类型。
分区函数 | 描述 | 支持版本 | 分区函数单调性 | 分区列的数据类型支持情况 | ||
整数类型① | 时间类型② | 字符串类型③ | ||||
YEAR | 返回输入值的年份,详情请参见MySQL YEAR。 | 5.4.13及以上。 | 非严格单调 | ❌ | ✅ | ❌ |
MONTH | 返回输入值的月份,详情请参见MySQL MONTH。 | 5.4.13及以上。 | 没有单调性 | ❌ | ✅ | ❌ |
TO_DAYS | 返回自公元元年(0000-01-01)至输入日期之间的天数,详情请参见MySQL TO_DAYS。 | 5.4.13及以上。 | 非严格单调 | ❌ | ✅ | ❌ |
TO_MONTHS | 返回公元元年(0000-01-01)至输入日期之间的月数。该函数为PolarDB-X特有函数。 | 5.4.16-16717637版本及以上。 | 非严格单调 | ❌ | ✅ | ❌ |
TO_WEEKS | 返回公元元年(0000-01-01)至输入日期之间的星期数。该函数为PolarDB-X特有函数。 | 5.4.16-16717637版本及以上。 | 非严格单调 | ❌ | ✅ | ❌ |
TO_SECONDS | 返回公元元年0时刻至输入时间之间的秒数,详情请参见MySQL TO_SECONDS。 | 5.4.13及以上。 | 非严格单调 | ❌ | ✅ | ❌ |
UNIX_TIMESTAMP | 返回'1970-01-01 00:00:00' UTC至输入时间之间的秒数,详情请参见MySQL UNIX_TIMESTAMP。 | 5.4.13及以上。 | 非严格单调 | ❌ | ✅ | ❌ |
DAYOFWEEK | 返回输入日期的星期编号,(1 = Sunday, 2 = Monday, …, 7 = Saturday),详情请参见MySQL DAYOFWEEK。 | 5.4.16-16717637版本及以上。 | 没有单调性 | ❌ | ✅ | ❌ |
DAYOFMONTH | 返回输入日期是当月的第几天(取值范围为1至31),详情请参见MySQL DAYOFMONTH。 | 5.4.16-16717637版本及以上。 | 没有单调性 | ❌ | ✅ | ❌ |
DAYOFYEAR | 返回输入日期是当年的第几天(取值范围为1至366),详情请参见MySQL DAYOFYEAR。 | 5.4.16-16717637版本及以上。 | 没有单调性 | ❌ | ✅ | ❌ |
SUBSTR/SUBSTRING | 返回输入字符串的一个子串,详情请参见MySQL SUBSTR(注:SUBSTR/SUBSTRING)。 | 5.4.16-16717637版本及以上。 | 没有单调性 | ❌ | ❌ | ✅ |
RIGHT | 输入一个字符串和想截取的长度n,返回该字符串最右端长度为n的子串,详情请参见MySQL RIGHT。 | 5.4.18-17034692版本及以上。 | 没有单调性 | ❌ | ❌ | ✅ |
LEFT | 输入一个字符串和想截取的长度n,返回该字符串最左端长度为n的子串,详情请参见MySQL LEFT。 | 5.4.18-17034692版本及以上。 | 没有单调性 | ❌ | ❌ | ✅ |
①整数类型:BIGINT/BIGINT UNSINGEDINT/INT/INT UNSINGED/MEDIUMINT/MEDIUMINT UNSINGED/SMALLINT/SMALLINT UNSINGED/TINYINT/TINYINT UNSINGED
②时间类型:DATETIME/DATE/TIMESTAMP
③字符串类型:CHAR/VARCHR
下表列出了PolarDB-X的各种分区函数允许在哪些分区策略中使用。
分区函数 | KEY分区 | HASH分区 | RANGE分区 | RANGE COLUMNS分区 | LIST分区 | LIST COLUMNS分区 | COHASH分区 | ||
单列分区键 | 向量分区键 | 单列分区键 | 向量分区键 | ||||||
YEAR | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
TO_DAYS | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
TO_MONTHS | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
TO_WEEKS | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
TO_SECOND | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
UNIX_TIMESTAMP | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
MONTH | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
DAYOFWEEK | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
DAYOFMONTH | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
DAYOFYEAR | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
SUBSTR/SUBSTRING | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ |
RIGHT | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ |
LEFT | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ |