本文介紹了TTL表相關的CREATE TABLE語法。
若在建表時指定local_partition_definition語法,則將創建一張TTL表,TTL表會將每個物理表按照時間進行分區。
如果需要將t_order的物理表按照gmt_modified列進行時間分區,每個分區間隔一個月,每個分區12個月后過期,提前創建3個分區,創建語法如下:
CREATE TABLE t_order (
id bigint NOT NULL AUTO_INCREMENT,
gmt_modified DATETIME NOT NULL,
PRIMARY KEY (id, gmt_modified)
)
PARTITION BY HASH(id)
PARTITIONS 16
LOCAL PARTITION BY RANGE (gmt_modified)
INTERVAL 1 MONTH
EXPIRE AFTER 12
PRE ALLOCATE 3;
參數 | 是否必填 | 示例 | 說明 |
LOCAL PARTITION BY RANGE (column_name) | 是 | LOCAL PARTITION BY RANGE (gmt_modified) | 指定TTL表的物理時間分區列。在物理表上數據會以此列做時間分區。 |
STARTWITH 'yyyy-MM-dd' | 否 | STARTWITH '2022-01-01' | 初始時間分區。TTL表會把“初始時間分區”作為第一個分區。 |
INTERVAL interval_count MONTH | 是 | INTERVAL 2 MONTH | 時間分區的間隔,支持的時間粒度為YEAR、MONTH、DAY。 |
EXPIRE AFTER expire_after_count | 否 | EXPIRE AFTER 6 | 指定分區失效的時間。 INTERVAL 2 MONTHEXPIRE AFTER 6 表示每隔2個月劃分一個物理時間分區每經過6倍物理時間分區(12個月),失效1個分區。 |
PRE ALLOCATE pre_allocate_count | 否 | PRE ALLOCATE 2 | 指定提前創建的分區數量。 示例表示提前創建2個物理時間分區。 |
PIVOTDATE pivotdate_func | 否 | PIVOTDATE NOW() | 指定基準時間,一般用默認值。 |
DISABLE SCHEDULE | 否 | DISABLE SCHEDULE | 禁用自動分區滾動。 如果開啟的話,過期分區會自動被刪除,新分區會自動提前創建。 |
語法限制
TTL表支持的時間分區列類型為:date、datetime;
所有的唯一鍵(包括主鍵)必須包含TTL表的local partition by range時間分區列;
TTL表最多支持32個最大物理時間分區。
查看TTL表的分區元數據
TTL表創建后,可以通過information_schema.local_partitions
視圖查看物理表上的分區信息。每個物理時間分區(Local Partition)會存儲小于PARTITION_DESCRIPTION
的數據。比如下面的例子中,'2021-11-15'的數據會存儲到分區:p20211201。
每個物理時間分區(Local Partition)的失效時間會通過PARTITION_COMMENT
顯示。
local_partition是示例中的庫名稱,請根據實際情況進行替換。
select * from information_schema.local_partitions where table_name = 't_order' and table_schema='local_partition'\G;
*************************** 1. row ***************************
TABLE_SCHEMA: local_partition
TABLE_NAME: t_order
PARTITION_NAME: p20211101
PARTITION_METHOD: RANGE COLUMNS
PARTITION_EXPRESSION: `gmt_modified`
PARTITION_DESCRIPTION: '2021-11-01'
PARTITION_COMMENT: expire:2022-11-01
*************************** 2. row ***************************
TABLE_SCHEMA: local_partition
TABLE_NAME: t_order
PARTITION_NAME: p20211201
PARTITION_METHOD: RANGE COLUMNS
PARTITION_EXPRESSION: `gmt_modified`
PARTITION_DESCRIPTION: '2021-12-01'
PARTITION_COMMENT: expire:2022-12-01
*************************** 3. row ***************************
TABLE_SCHEMA: local_partition
TABLE_NAME: t_order
PARTITION_NAME: pmax
PARTITION_METHOD: RANGE COLUMNS
PARTITION_EXPRESSION: `gmt_modified`
PARTITION_DESCRIPTION: MAXVALUE
PARTITION_COMMENT:
7 rows in set (13.19 sec)
校驗物理分區的完整性
校驗所有物理表(包括GSI)的物理時間分區(Local Partition)的完整性。
check table t_order with local partition;