ALTER TABLE REPLACE COLUMNS - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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