ALTER TABLE REPLACE COLUMNS - Amazon Athena

ALTER TABLE REPLACE COLUMNS

从使用 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 table-name REPLACE COLUMNScolumns(列)是复数形式。您不仅必须指定要替换的列,还必须指定要保留的列,否则会删除未指定的列。这种语法和行为源自 Apache Hive DDL。有关参考,请参阅 Apache 文档中的添加/替换列

示例

在以下示例中,使用 LazySimpleSerDe 创建的表 names_cities 具有三个名为 col1col2col3 的列。所有列均为 string 类型。要显示表中的列,以下命令应使用 SHOW COLUMNS 语句。

SHOW COLUMNS IN names_cities

查询结果:

col1 col2 col3

以下 ALTER TABLE REPLACE COLUMNS 命令将列名替换为 first_namelast_namecity。底层源数据不受影响。

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 查询。