

# 在表的开头或中间添加新列
<a name="updates-add-columns-beginning-middle-of-table"></a>

添加列是最常见的架构变化之一。例如，您可以添加新列，用新的数据来充实表。或者，如果一个现有列的源发生了变化，您可以添加一个新列，同时保留该列表的前一版本，以调整依赖它们的应用程序。

要将列添加到表的开头或中间，并继续针对现有表运行查询，请使用 AVRO、JSON 以及 Parquet 和 ORC（如果它们的 SerDe 属性设为按名称读取）。有关信息，请参阅[了解 Apache ORC 和 Apache Parquet 的索引访问权限](handling-schema-updates-chapter.md#index-access)。

不要在 CSV 和 TSV 表的开头或中间添加列，因为这些格式取决于排序。如果在这些情况下添加列，分区架构改变将导致架构不匹配的错误。

 以下示例创建了一个新表，该表基于 JSON 数据在表的中间添加了一个 `o_comment` 列。

```
CREATE EXTERNAL TABLE orders_json_column_addition (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_comment` string, 
   `o_totalprice` double, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://amzn-s3-demo-bucket/orders_json/';
```