从使用 LazySimpleSerDe 创建的表中移除所有现有列并用指定的列集替换它们。使用可选 PARTITION
语法时,将更新分区元数据。您还可以通过仅指定要保留的列,使用 ALTER TABLE REPLACE
COLUMNS
来删除列。
摘要
ALTER TABLE table_name
[PARTITION
(partition_col1_name = partition_col1_value
[,partition_col2_name = partition_col2_value][,...])]
REPLACE COLUMNS (col_name data_type [, col_name data_type, ...])
参数
- PARTITION (partition_col_name = partition_col_value [,...])
-
指定一个具有指定列名称/值组合的分区。仅当列的数据类型为字符串时,才将
partition_col_value
包含在引号中。 - REPLACE COLUMNS (col_name data_type [,col_name data_type,...])
-
用指定的列名和数据类型替换现有列。
注意
-
要在运行
ALTER TABLE REPLACE COLUMNS
后在 Athena 查询编辑器导航窗格中查看表列的更改,您可以手动刷新编辑器中的表列表,然后重新展开表。 -
ALTER TABLE REPLACE COLUMNS
不适用于具有date
数据类型的列。若要解决此问题,请使用表中的timestamp
数据类型。 -
请注意,即使您只替换单个列,语法也必须是
ALTER TABLE
,columns(列)是复数形式。您不仅必须指定要替换的列,还必须指定要保留的列,否则会删除未指定的列。这种语法和行为源自 Apache Hive DDL。有关参考,请参阅 Apache 文档中的添加/替换列table-name
REPLACE COLUMNS。
示例
在以下示例中,使用 LazySimpleSerDe 创建的表 names_cities
具有三个名为 col1
、col2
和 col3
的列。所有列均为 string
类型。要显示表中的列,以下命令应使用 SHOW COLUMNS 语句。
SHOW COLUMNS IN names_cities
查询结果:
col1 col2 col3
以下 ALTER TABLE REPLACE COLUMNS
命令将列名替换为 first_name
、last_name
和 city
。底层源数据不受影响。
ALTER TABLE names_cities
REPLACE COLUMNS (first_name string, last_name string, city string)
要测试结果,请再次运行 SHOW COLUMNS
。
SHOW COLUMNS IN names_cities
查询结果:
first_name last_name city
显示新列名的另一种方法是在 Athena 查询编辑器中预览表或运行您自己的 SELECT
查询。