本文介绍了TTL表相关的ALTER TABLE语法。

变更TTL表的定时任务

ALTER TABLE tbl_name
    local_partition_alter_options

local_partition_alter_options:
        ALLOCATE LOCAL PARTITION
  |    EXPIRE LOCAL PARTITION [local_partition_name]
  | REMOVE LOCAL PARTITIONING
  | local_partition_definition 

local_partition_definition:
        LOCAL PARTITION BY RANGE (column_name)
    [STARTWITH 'yyyy-MM-dd']
    INTERVAL interval_count MONTH
    [EXPIRE AFTER expire_after_count]
    [PRE ALLOCATE pre_allocate_count]
    [PIVOTDATE pivotdate_func]
    [DISABLE SCHEDULE]

pivotdate_func:
        NOW()
  |    DATE_ADD(...)
  | DATE_SUB(...)

创建新的物理时间分区

此命令多次调用不会无限制创建新分区,只会创建预定时间内的新分区。

ALTER TABLE t_order ALLOCATE LOCAL PARTITION;

删除过期的物理时间分区

此命令多次调用不会无限制删除已有分区,只会删除过期分区。

  • 可以指定物理时间分区名,可通过information_schema.local_partitions获取
    ALTER TABLE t_order EXPIRE LOCAL PARTITION p20210401;
  • 不指定分区名时,删除所有已过期的分区
    ALTER TABLE t_order EXPIRE LOCAL PARTITION;
    说明 未失效分区不允许删除,会报错。

TTL表转换成普通表

ALTER TABLE t_order REMOVE LOCAL PARTITIONING;
说明 TTL表转换成普通表需要进行数据搬迁,请在业务低峰期进行操作。

普通表转换成TTL表

ALTER TABLE t_order
  LOCAL PARTITION BY RANGE (gmt_modified)
  STARTWITH '2021-01-01'
  INTERVAL 1 MONTH
  EXPIRE AFTER 12
  PRE ALLOCATE 6;
说明 普通表转换成TTL表需要进行数据搬迁,请在业务低峰期进行操作。