本文介紹了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 | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ |