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' = '';
说明关于冷热分离的介绍,请参见冷热分离介绍。
结果查询
在集群管理系统的概览页面,单击目标数据库下的目标表名。在当前详情表格区域,单击查看表属性,查看CHS和CHS_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)