

# 重命名列
<a name="updates-renaming-columns"></a>

有时，您可能需要重命名表列，以便纠正拼写、让列名称含义更清晰或重用现有列以避免列重新排序。

如果将数据存储为 CSV 和 TSV，或 Parquet 和 ORC（配置为按索引读取），则可以将列重新命名。有关信息，请参阅[了解 Apache ORC 和 Apache Parquet 的索引访问权限](handling-schema-updates-chapter.md#index-access)。

Athena 会按照架构中的列顺序读取 CSV 和 TSV 数据并以同样的顺序返回。它不会使用列名称来将数据映射到列，因此，如果不中断 Athena 查询，您就可以重命名 CSV 或 TSV 格式列。

重命名列的一种策略是基于相同的基础数据创建新表，但使用新的列名。以下示例会创建一个名为 `orders_parquet_column_renamed` 新 `orders_parquet` 表。该示例将列 ``o_totalprice`` 名称更改为 ``o_total_price``，然后在 Athena 中运行查询：

```
CREATE EXTERNAL TABLE orders_parquet_column_renamed (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_total_price` double, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
   `o_comment` string
) 
STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/orders_parquet/';
```

对于 Parquet 表而言，以下查询可以运行，但经过重命名的列不会显示数据，因为列是按名称访问的（Parquet 的默认设置）而不是按索引访问的：

```
SELECT * 
FROM orders_parquet_column_renamed;
```

对于 CSV 表的查询看起来类似：

```
CREATE EXTERNAL TABLE orders_csv_column_renamed (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_total_price` double, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
   `o_comment` string
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://amzn-s3-demo-bucket/orders_csv/';
```

对于 CSV 表而言，以下查询可以运行，并将显示所有列的数据，包括经过重新命名的列：

```
SELECT * 
FROM orders_csv_column_renamed;
```