tencent cloud

TDSQL Boundless

ALTER TABLE

Download
Focus Mode
Font Size
Last updated: 2026-07-10 14:54:31

功能描述

修改已存在的表的结构,例如修改绑定的分区亲和性策略等。

语法

alter_table_stmt:
ALTER TABLE table_name USING PARTITION POLICY partition_policy_name
| ALTER TABLE table_name DROP PARTITION POLICY_ [FORCE]
| ALTER TABLE table_name STORAGE_TIER [=] {AUTO_STORAGE | LOCAL_STORAGE | OBJECT_STORAGE}
| ALTER TABLE table_name MODIFY PARTITION (partition_name [, partition_name ...]) STORAGE_TIER [=] {AUTO_STORAGE | LOCAL_STORAGE | OBJECT_STORAGE}
| ALTER TABLE table_name DROP PARTITION partition_name [, partition_name ...] [UPDATE GLOBAL INDEXES]
| ALTER TABLE table_name TRUNCATE PARTITION {ALL | partition_name [, partition_name ...]} [UPDATE GLOBAL INDEXES]

参数说明

参数
是否必选
说明
ALTER TABLE table_name USING PARTITION POLICY partition_policy_name
可选
修改表绑定的分区亲和性策略,其中table_namepartition_policy_name需要显式指定。
ALTER TABLE table_name DROP PARTITION POLICY_ [FORCE]
可选
解绑表绑定的分区亲和性策略。
table_name 需显式指定。
FORCE 选项:
若指定,则执行成功后,当前表不再绑定任何亲和性策略。
若不指定,则会尝试解绑当前表已绑定的显式亲和性策略,再将其绑定可能的隐式亲和性策略。
ALTER TABLE table_name STORAGE_TIER [=]
可选
修改表级的存储层级,用于声明数据对象在冷热分层存储中的存放位置。取值如下:
AUTO_STORAGE:自动模式,由系统根据冷热分层策略及实例的默认存储层自动决定数据对象的存储位置。
LOCAL_STORAGE:本地存储,数据对象存放在本地磁盘,适用于热数据,访问延迟低。
OBJECT_STORAGE:对象存储,数据对象存放在对象存储中,适用于冷数据归档,存储成本低。
修改后仅影响后续新生成的数据对象的存储位置,已存在数据对象的迁移由系统按照冷热分层策略异步执行。
ALTER TABLE table_name MODIFY PARTITION (partition_name [, partition_name ...]) STORAGE_TIER [=]
可选
修改指定分区的存储层级,支持一次指定一个或多个分区,分区级声明优先于表级。典型场景:将历史分区归档至对象存储以降低存储成本,或将热点分区迁回本地存储以降低访问延迟。
说明事项:
partition_name 需为已存在的分区名,仅支持显式分区表。
修改后仅影响后续新生成的数据对象的存储位置,已存在数据对象的迁移由系统按照冷热分层策略异步执行。
ALTER TABLE table_name DROP PARTITION ... [UPDATE GLOBAL INDEXES]
ALTER TABLE table_name TRUNCATE PARTITION ... [UPDATE GLOBAL INDEXES]
可选
在执行 DROP PARTITIONTRUNCATE PARTITION 的同时,同步重建表上的全局二级索引(GSI),使全局二级索引在 DDL 完成后保持可用状态。
不指定 UPDATE GLOBAL INDEXES 子句:分区操作完成后,受影响表的所有全局二级索引会被标记为不可用,后续查询无法使用相关索引(包括 FORCE INDEX 提示),需要单独重建索引或重新创建索引才能恢复使用。
指定 UPDATE GLOBAL INDEXES 子句:DDL 执行过程中会同步重建全局二级索引,完成后全局二级索引保持可用状态,且数据与表中实际行保持一致。
该子句仅作用于全局二级索引,不影响本地索引。如果表上不存在全局二级索引,该子句不会产生额外作用。

示例

修改与解绑亲和性策略的操作。
# 创建分区亲和性策略pp1
tdsql [demo]> create partition policy pp1 partition by hash(int) partitions 4;
Query OK, 0 rows affected (0.02 sec)

# 创建hash 4分区的表t
tdsql [demo]> create table t(id INT) partition by hash(id) partitions 4;
Query OK, 0 rows affected (0.90 sec)

# 将表t绑定到分区亲和性策略pp1
tdsql [demo]> alter table t using partition policy pp1;
Query OK, 0 rows affected (0.64 sec)

# 解绑表t的分区亲和性,完成后表t会被自动绑定到对应的隐式亲和性策略
tdsql [demo]> alter table t drop partition policy;
Query OK, 0 rows affected (0.66 sec)

# 彻底解绑表t的分区亲和性策略,完成后表t不绑定任何分区亲和性策略
tdsql [demo]> alter table t drop partition policy force;
Query OK, 0 rows affected (0.61 sec)
修改表级的存储层,将整张表的存储层设为本地存储。
tdsql [demo]> ALTER TABLE t1 STORAGE_TIER = LOCAL_STORAGE;
Query OK, 0 rows affected
修改分区级的存储层,将指定分区的存储层设为对象存储。
# 将分区p1归档至对象存储
tdsql [demo]> ALTER TABLE t1 MODIFY PARTITION (p1) STORAGE_TIER = OBJECT_STORAGE;
Query OK, 0 rows affected

# 一次将多个历史分区归档至对象存储
tdsql [demo]> ALTER TABLE t1 MODIFY PARTITION (p0, p1) STORAGE_TIER = OBJECT_STORAGE;
Query OK, 0 rows affected
修改分区时同步重建全局二级索引。
# 创建带全局二级索引的分区表
tdsql [demo]> CREATE TABLE orders (
id INT NOT NULL,
user_id INT NOT NULL,
created_date DATE NOT NULL,
PRIMARY KEY (id, created_date),
INDEX gsi_user (user_id) GLOBAL
) PARTITION BY RANGE (TO_DAYS(created_date)) (
PARTITION p202401 VALUES LESS THAN (TO_DAYS('2024-02-01')),
PARTITION p202402 VALUES LESS THAN (TO_DAYS('2024-03-01')),
PARTITION p202403 VALUES LESS THAN (TO_DAYS('2024-04-01'))
);
Query OK, 0 rows affected

# 删除指定分区,并同步重建全局二级索引;DDL 完成后 gsi_user 仍可用
tdsql [demo]> ALTER TABLE orders DROP PARTITION p202401 UPDATE GLOBAL INDEXES;
Query OK, 0 rows affected

# 清空指定分区,并同步重建全局二级索引
tdsql [demo]> ALTER TABLE orders TRUNCATE PARTITION p202402 UPDATE GLOBAL INDEXES;
Query OK, 0 rows affected

# 不指定 UPDATE GLOBAL INDEXES 时,gsi_user 会被标记为不可用
tdsql [demo]> ALTER TABLE orders DROP PARTITION p202403;
Query OK, 0 rows affected, 1 warning

Help and Support

Was this page helpful?

Help us improve! Rate your documentation experience in 5 mins.

Feedback