本文介绍了创建及变更冷数据归档表的语法。

创建冷数据归档表

本文以创建TTL表t_order和关联的归档表t_order_oss为例说明创建冷数据归档表的步骤。

  1. 执行以下命令,在AUTO模式数据库中创建TTL表t_order。
    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;
    说明

    如果t_order表已经存在并且非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表的相关介绍及语法请参见TTL表功能

  2. 执行以下命令,创建归档表t_order_oss,并与t_order表绑定。
    CREATE TABLE t_order_oss LIKE t_order ENGINE = 'OSS' ARCHIVE_MODE = 'TTL';
    说明
    • ENGINE = 'OSS'表示表引擎为OSS服务,ARCHIVE_MODE = 'TTL'表示使用TTL模式进行表归档。
    • 归档表仅支持只读功能,不支持通过SQL直接写入数据。
  3. 当t_order表中的数据过期并归档到t_order_oss表中后,在归档数据详情页,可查看到归档表的归档状态。

    也可以通过查询information_schema.archive视图,查看归档表的归档状态。

归档表DDL

绑定归档表后,PolarDB-X支持对源TTL表执行部分DDL,并将DDL操作自动关联到归档表中。支持的语法如下:

说明 ALTER TABLE用于改变表的结构,如增加列、增加索引和修改数据定义。详细语法请参见ALTER TABLE(AUTO模式)
ALTER TABLE tbl_name
    [alter_option [, alter_option] ...]

alter_option: {
    table_options
  | ADD [COLUMN] col_name column_definition
        [FIRST | AFTER col_name]
  | ADD [COLUMN] (col_name column_definition,...)
  | ADD {INDEX | KEY} [index_name]
        [index_type] (key_part,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY]
        [index_name] [index_type] (key_part,...)
        [index_option] ...
  | ALGORITHM [=] {DEFAULT | INPLACE | COPY}
  | ALTER [COLUMN] col_name {
        SET DEFAULT {literal | (expr)}
      | DROP DEFAULT
    }
  | CHANGE [COLUMN] old_col_name new_col_name column_definition
        [FIRST | AFTER col_name]
  | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
  | DROP [COLUMN] col_name
  | DROP {INDEX | KEY} index_name
  | MODIFY [COLUMN] col_name column_definition
        [FIRST | AFTER col_name]
  | RENAME {INDEX | KEY} old_index_name TO new_index_name
  | RENAME [TO | AS] new_tbl_name
}

CREATE [UNIQUE] INDEX index_name
    [index_type]
    ON tbl_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option] ...

DROP INDEX index_name ON tbl_name
    [algorithm_option | lock_option]
            
通过MODIFY COLUMNCHANGE COLUMN进行列数据类型变更的说明:
  • 将支持为null的列修改成not null后,冷数据表中已有的null保持不变。
  • 列类型变更会在读取时将写入归档表的列类型直接转换为当前表的列类型。
  • 列类型变更不支持修改拆分键类型。
  • 不支持Online modify column

只支持以下定义的同类类型之间的转换,不能跨类型变更:

  • 无符号整数类型:tinyint unsigned、smallint unsigned、mediumint unsigned、int unsigned、bigint unsigned支持取值范围从小到大进行变更,以及变更数据类型长度。
  • 有符号整数类型:tinyint、smallint、mediumint、int、bigint支持取值范围从小到大进行变更,以及变更数据类型长度。
  • 字符串类型:char、varchar之间转换,以及变更数据类型长度。