腾讯云数据仓库 TCHouse-X ALTER TABLE(外表 DDL)

这篇说说ALTER TABLE语句,用于更改表的schema或属性,包括重命名、添加/删除列和分区等操作,并说明缓存清除等注意事项。 重命名与分区操作:RENAME TO更改表名,ADD/DROP PARTITION管理分区,均会清除缓存。 列操作:ADD/DROP/ALTER/REPLACE COLUMNS修改表结构,DROP和REPLACE仅支持Iceberg v2表。 属性与位置设置:SET/UNSET TBL。

相关产品
腾讯云数据仓库 TCHouse-X 产品页,含版本规格、价格与购买入口。

一、描述

ALTER TABLE 语句用于更改表的 schema 或属性。

二、重命名(RENAME)

ALTER TABLE RENAME TO 语句用于更改数据库中现有表的表名。表重命名命令不能用于在数据库之间移动表,只能在同一数据库内重命名表。

如果表已被缓存,该命令会清除表的缓存数据。缓存将在下次访问表时延迟填充。此外:

·表重命名命令会取消缓存所有引用该表的依赖项(如视图)。这些依赖项需要重新显式缓存。

·分区重命名命令会清除所有表依赖项的缓存,但保持它们为已缓存状态。因此,它们的缓存将在下次访问时延迟填充。

三、语法

ALTER TABLE table_identifier RENAME TO table_identifierALTER TABLE table_identifier partition_spec RENAME TO partition_spec

四、参数

参数 说明 语法
table_identifier 指定表名,可以选择性地用数据库名进行限定 [ database_name. ] table_name
partition_spec 要重命名的分区 PARTITION ( partition_col_name = partition_col_val [ , … ] )

五、添加列(ADD COLUMNS)

ALTER TABLE ADD COLUMNS 语句用于向现有表添加指定的列。

六、语法

ALTER TABLE table_identifier ADD COLUMNS ( col_spec [ , … ] )

七、参数

参数 说明 语法
table_identifier 指定表名,可以选择性地用数据库名进行限定 [ database_name. ] table_name
COLUMNS ( col_spec ) 指定要添加的列 –

八、删除列(DROP COLUMNS)

ALTER TABLE DROP COLUMNS 语句用于从现有表中删除指定的列。注意此语句仅支持 Iceberg v2 表。

九、语法

ALTER TABLE table_identifier DROP { COLUMN | COLUMNS } [ ( ] col_name [ , … ] [ ) ]

十、参数

参数 说明 语法
table_identifier 指定表名,可以选择性地用数据库名进行限定 [ database_name. ] table_name
col_name 指定列名 –

十一、重命名列(RENAME COLUMN)

ALTER TABLE RENAME COLUMN 语句用于更改现有表的列名。注意此语句仅支持 Iceberg v2 表。

十二、语法

ALTER TABLE table_identifier RENAME COLUMN col_name TO col_name

十三、参数

参数 说明 语法
table_identifier 指定表名,可以选择性地用数据库名进行限定 [ database_name. ] table_name
col_name 指定列名 –

十四、修改列(ALTER OR CHANGE COLUMN)

ALTER TABLE ALTER COLUMN 或 ALTER TABLE CHANGE COLUMN 语句用于更改列的定义。

十五、语法

ALTER TABLE table_identifier { ALTER | CHANGE } [ COLUMN ] col_name alterColumnAction

十六、参数

参数 说明 语法
table_identifier 指定表名,可以选择性地用数据库名进行限定 [ database_name. ] table_name
col_name 指定列名 –
alterColumnAction 更改列的定义 –

十七、替换列(REPLACE COLUMNS)

ALTER TABLE REPLACE COLUMNS 语句用于删除所有现有列并添加新的列集。注意此语句仅支持 Iceberg v2 表。

十八、语法

ALTER TABLE table_identifier [ partition_spec ] REPLACE COLUMNS [ ( ] qualified_col_type_with_position_list [ ) ]

十九、参数

参数 说明 语法
table_identifier 指定表名,可以选择性地用数据库名进行限定 [ database_name. ] table_name
partition_spec 要替换的分区 PARTITION ( partition_col_name = partition_col_val [ , … ] )
qualified_col_type_with_position_list 要添加的列的列表 col_name col_type [ col_comment ] [ col_position ] [ , … ]

20、添加分区(ADD PARTITION)

ALTER TABLE ADD 语句用于向分区表添加分区。如果表已被缓存,该命令会清除表及其所有引用依赖项的缓存数据。缓存将在下次访问时延迟填充。

21、语法

ALTER TABLE table_identifier ADD [IF NOT EXISTS] ( partition_spec [ partition_spec … ] )

22、参数

参数 说明 语法
table_identifier 指定表名,可以选择性地用数据库名进行限定 [ database_name. ] table_name
partition_spec 要添加的分区 PARTITION ( partition_col_name = partition_col_val [ , … ] )

23、删除分区(DROP PARTITION)

ALTER TABLE DROP 语句用于删除表的分区。如果表已被缓存,该命令会清除表及其所有引用依赖项的缓存数据。缓存将在下次访问时延迟填充。

24、语法

ALTER TABLE table_identifier DROP [ IF EXISTS ] partition_spec [PURGE]

25、参数

参数 说明 语法
table_identifier 指定表名,可以选择性地用数据库名进行限定 [ database_name. ] table_name
partition_spec 要删除的分区 PARTITION ( partition_col_name = partition_col_val [ , … ] )

26、设置表属性(SET TABLE PROPERTIES)

ALTER TABLE SET 命令用于设置表属性。如果某个属性已经设置,新值将覆盖旧值。ALTER TABLE UNSET 用于删除表属性。

27、语法

— 设置表属性ALTER TABLE table_identifier SET TBLPROPERTIES ( key1 = val1, key2 = val2, … )– 取消设置表属性ALTER TABLE table_identifier UNSET TBLPROPERTIES [ IF EXISTS ] ( key1, key2, … )

28、设置 SERDE

ALTER TABLE SET 命令用于在 Hive 表中设置 SERDE 或 SERDE 属性。如果某个属性已经设置,新值将覆盖旧值。

29、语法

— 设置 SERDE 属性ALTER TABLE table_identifier [ partition_spec ] SET SERDEPROPERTIES ( key1 = val1, key2 = val2, … )ALTER TABLE table_identifier [ partition_spec ] SET SERDE serde_class_name [ WITH SERDEPROPERTIES ( key1 = val1, key2 = val2, … ) ]

30、设置位置和文件格式(SET LOCATION And SET FILE FORMAT)

ALTER TABLE SET 命令也可用于更改现有表的文件位置和文件格式。如果表已被缓存,ALTER TABLE .. SET LOCATION 命令会清除表及其所有引用依赖项的缓存数据。

31、语法

— 更改文件格式ALTER TABLE table_identifier [ partition_spec ] SET FILEFORMAT file_format– 更改文件位置ALTER TABLE table_identifier [ partition_spec ] SET LOCATION 'new_location'

32、参数

参数 说明 语法
table_identifier 指定表名,可以选择性地用数据库名进行限定 [ database_name. ] table_name
partition_spec 指定要设置属性的分区 PARTITION ( partition_col_name = partition_col_val [ , … ] )
SERDEPROPERTIES 指定要设置的 SERDE 属性 ( key1 = val1, key2 = val2, … )

33、恢复分区(RECOVER PARTITIONS)

ALTER TABLE RECOVER PARTITIONS 语句用于恢复表目录中的所有分区并更新 Hive 元数据存储。另一种恢复分区的方法是使用 MSCK REPAIR TABLE。

34、语法

ALTER TABLE table_identifier RECOVER PARTITIONS

35、参数

参数 说明 语法
table_identifier 指定表名,可以选择性地用数据库名进行限定 [ database_name. ] table_name

36、示例

— 创建分区表CREATE EXTERNAL TABLE student_alter_test (name STRING, rollno INT) USING PARQUET PARTITIONED BY (age INT) LOCATION 'cosn://<your_bucket_name>//test_alter_table/student';– 重命名表ALTER TABLE student_alter_test RENAME TO student_info_test;– 验证重命名后的表结构DESC student_info_test;– 添加列ALTER TABLE student_info_test ADD COLUMNS (LastName STRING, DOB TIMESTAMP);– 修改列注释ALTER TABLE student_info_test ALTER COLUMN LastName COMMENT 'new comment';– 添加分区ALTER TABLE student_info_test ADD IF NOT EXISTS PARTITION (age=18);ALTER TABLE student_info_test ADD IF NOT EXISTS PARTITION (age=18) PARTITION (age=20);– 查看分区SHOW PARTITIONS student_info_test;– 删除分区ALTER TABLE student_info_test DROP IF EXISTS PARTITION (age=20);– 设置表属性ALTER TABLE student_info_test SET TBLPROPERTIES ('winner' = 'loser');ALTER TABLE student_info_test UNSET TBLPROPERTIES ('winner');– 设置位置ALTER TABLE student_info_test SET LOCATION 'cosn://<your_bucket_name>//test_alter_table/new_location';– 设置 SERDE 属性ALTER TABLE student_info_test SET SERDEPROPERTIES ('key1' = 'val1');– RECOVER PARTITIONSCREATE EXTERNAL TABLE recover_part_test (id INT, name STRING, score INT) PARTITIONED BY (subject STRING) STORED AS PARQUET LOCATION 'cosn://<your_bucket_name>//test_alter_table/recover_part_test';ALTER TABLE recover_part_test ADD PARTITION (subject='math');INSERT INTO recover_part_test PARTITION (subject='math') VALUES (1, 'Charlie', 95), (2, 'Diana', 88);INSERT INTO recover_part_test PARTITION (subject='physics') VALUES (3, 'Eve', 92), (4, 'Frank', 78);SELECT * FROM recover_part_test;SHOW PARTITIONS recover_part_test;ALTER TABLE recover_part_test RECOVER PARTITIONS;SHOW PARTITIONS recover_part_test;

赞 (0)
上一篇 4天前
下一篇 4天前