文档

ALTER TABLE

更新时间:

ALTER TABLE语法用于修改表的结构,例如增加列、删除列、修改列的数据类型、新增表属性等。本文介绍ALTER TABLE语法在不同引擎中的使用方法和差异。

引擎与版本

ALTER TABLE语法适用于宽表引擎和时序引擎。无版本限制。

注意事项

ALTER TABLE操作不会锁定表,在执行DDL操作过程中整个表都是可以正常读写的。在读写过程中,可能会遇到超时报错或轻微抖动和毛刺,可能是由于以下原因:

  • DDL操作变更时,每个分片都会先关闭再打开并重新加载元数据,该过程耗时很短,通常在十毫秒至数百毫秒之间。如果在该过程恰好有请求发送至重新打开的分片,则此时请求可能会有轻微抖动或毛刺,建议您在业务低峰期执行DDL变更操作。

  • 所有DDL操作都会在分片完成变更后才会返回执行结果,因此在对规模较大的表执行DDL操作时,由于客户端超时时间较短,可能会遇到超时报错,但实际上DDL操作会在服务器上继续执行直至完成。

语法

alter_table_statement   ::=  ALTER TABLE table_name alter_table_instruction
alter_table_instruction ::=  ADD [COLUMN] column_name type [TAG]
                             | DROP COLUMN [ IF EXISTS ] column_name
                             | SET table_options
                             | COMPACT (idcName)?

差异说明

Lindorm宽表引擎和时序引擎的ALTER TABLE语法差异较大。差异对比请参见下表。

语法要素

宽表引擎

时序引擎

ADD COLUMN

COMPACT

说明

宽表引擎2.3.4及以上版本支持。

✖️

DROP COLUMN

说明

宽表引擎2.6.2.1及以上版本支持。

✖️

SET table_options

✖️

使用说明

ADD COLUMN(新增列)

宽表引擎和时序引擎均支持ADD COLUMN。

新增列有以下规则:

  • 新增的列不能声明为主键。

  • 针对时序引擎,只支持新增标签列(TAG)和量测值列(FIELD),不支持新增时间戳列。

DROP COLUMN(删除列)

仅版本为2.6.2.1及以上版本的宽表引擎支持DROP COLUMN。

重要

DROP COLUMN功能目前处于邀测阶段,如需删除数据表中已有的列,请联系Lindorm技术支持(钉钉号:s0s3eg3)开通该功能。

SET table_options(设置表属性)

宽表引擎支持SET table_options。

具体的表属性列表,请参见表属性

重要

修改MUTABILITY和CONSISTENCY属性,有以下两点注意事项:

  • 创建索引之前,支持修改MUTABILITY和CONSISTENCY。

  • 创建索引之后:

    • 无法修改MUTABILITY。

    • 仅支持将CONSISTENCY的值从eventual修改为strong,但不支持从strong修改为eventual。

示例请参见开启动态列

COMPACT(强制执行Major Compaction)

仅版本为2.3.4及以上版本的宽表引擎支持Major Compaction。

执行Major Compaction操作,会合并数据文件,清理已删除或过期的数据,释放磁盘空间,提高读写性能,但Major Compaction操作会占用系统资源。

  • 不指定idcName:

    • 对单可用区实例来说,因为只有一个IDC,是否指定idcName没有区别。

    • 对多可用区实例来说,有2个IDC,不指定idcName时Major Compaction操作的执行规则如下:

      • 宽表引擎版本低于2.6.4.2:只会对idc1进行Major Compaction。

      • 宽表引擎为2.6.4.2及以上版本:默认对所有的IDC进行Major Compaction。

  • 指定idcName,表示对指定IDC进行Major Compaction。idcName可指定多个,多个idcName之间用半角逗号(,)分隔。

示例请参见执行Major Compaction

示例

本文提供的示例基于CREATE TABLE文档的建表示例语句。

CREATE TABLE sensor (
    device_id VARCHAR NOT NULL,
    region VARCHAR NOT NULL,
    time TIMESTAMP NOT NULL,
    temperature DOUBLE,
    humidity BIGINT,
    PRIMARY KEY(device_id, region, time)
);

新增列

为表sensor新增一个列n1。

ALTER TABLE sensor ADD COLUMN n1 DOUBLE;

删除列

为表sensor删除列n1。

ALTER TABLE sensor DROP COLUMN IF EXISTS n1;

结果验证

执行以下语句可以验证操作结果。

DESCRIBE table sensor;

开启动态列

开启dt表的动态列。

ALTER TABLE sensor SET 'DYNAMIC_COLUMNS' = 'true';
说明

关于动态列的介绍,请参见动态列

设置数据有效期

  • 为dt表设置数据有效期,时间单位为秒(s)。

    ALTER TABLE sensor SET 'TTL' = '2592000';
  • 为dt表取消数据有效期。

    ALTER TABLE sensor SET 'TTL' = '';

    结果验证

    在集群管理系统的概览页面,单击目标数据库下的目标表名,可在当前详情表格区域,查看ttl参数的值。如何进入集群管理系统,请参见登录集群管理系统

设置压缩算法

  • 设置sensor表的压缩算法为ZSTD。

    ALTER TABLE sensor SET 'COMPRESSION' = 'ZSTD';
  • 设置sensor表的压缩算法为None。

    ALTER TABLE sensor SET 'COMPRESSION' = 'NONE';

    结果查询

    在集群管理系统的概览页面,单击目标数据库下的目标表名。在当前详情表格区域,单击查看表属性,查看COMPRESSION参数的值。

设置冷热分离

  • 设置sensor表的冷热分界线。

    ALTER TABLE sensor SET 'CHS' = '86400', 'CHS_L2' = 'storagetype=COLD';
  • 取消sensor表的冷热分界线。

    ALTER TABLE sensor SET 'CHS' = '', 'CHS_L2' = '';
    说明

    关于冷热分离的介绍,请参见冷热分离介绍

    结果查询

    在集群管理系统的概览页面,单击目标数据库下的目标表名。在当前详情表格区域,单击查看表属性,查看CHSCHS_L2参数的值。

执行Major Compaction

  • 对sensor表执行Major Compaction。

    ALTER TABLE sensor COMPACT;
    说明

    如果实例为多可用区实例,需注意以下规则:

    • 如果宽表引擎版本低于2.6.4.2版本,未指定IDC时,系统默认对idc1进行Major Compaction。

    • 如果宽表引擎为2.6.4.2及以上版本,系统默认对所有的IDC进行Major Compaction。

  • 对idc2执行Major Compaction。

    ALTER TABLE sensor COMPACT 'idc2';
  • 对idc1和idc2执行Major Compaction。

    ALTER TABLE sensor COMPACT 'idc1,idc2';

  • 本页导读 (1)
文档反馈