

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# ALTER TABLE REPLACE COLUMNS
<a name="alter-table-replace-columns"></a>

從透過 [LazySimpleSerDe](lazy-simple-serde.md) 建立的資料表中移除所有現有的資料欄，並用指定的一組資料欄取代它們。使用選用的 `PARTITION` 語法時，會更新分割區中繼資料。您也可以使用 `ALTER TABLE REPLACE COLUMNS` 透過僅指定您想要保留的資料欄來刪除其他資料欄。

## 概要
<a name="synopsis"></a>

```
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, ...])
```

## Parameters
<a name="parameters"></a>

**PARTITION (partition\$1col\$1name = partition\$1col\$1value [,...])**  
以您指定的資料欄名稱/值組合來指定分割區。只有當資料欄的資料類型為字串時，才需要用引號括住 `partition_col_value`。

**REPLACE COLUMNS (col\$1name data\$1type [,col\$1name data\$1type,...])**  
以指定的資料欄名稱和資料類型取代現有資料欄。

## 備註
<a name="alter-table-replace-columns-notes"></a>
+ 如需在執行 `ALTER TABLE REPLACE COLUMNS` 之後，查看 Athena 查詢編輯器導覽窗格中的資料表資料表欄位變更，請手動重新整理編輯器中的資料表清單，然後再次展開資料表。
+ `ALTER TABLE REPLACE COLUMNS` 不適用於具有 `date` 資料類型的資料欄。若要解決這個問題，請轉為使用資料表中的 `timestamp` 資料類型。
+ 請注意，即使您只取代單一資料欄，語法必須是 `ALTER TABLE table-name REPLACE COLUMNS`，以及複數形式的*資料欄*。您不僅必須指定要取代的資料欄，還必須指定要保留的資料欄 – 如果不是，您未指定的資料欄將會遭到捨棄。這種語法和行為從 Apache Hive DDL 衍生。如需參考，請參閱 Apache 文件中的[新增/取代資料欄](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Add/ReplaceColumns)。

## 範例
<a name="alter-table-replace-columns-example"></a>

在下列範例中，資料表 `names_cities` 是使用 [LazySimpleSerDe](lazy-simple-serde.md) 所建立的，並有三個名為 `col1`、`col2` 和 `col3` 的資料欄。所有資料欄均為 `string` 類型。若要顯示資料表中的資料欄，下列命令會使用 [SHOW COLUMNS](show-columns.md) 陳述式。

```
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 查詢編輯器中[預覽資料表](creating-tables-showing-table-information.md)，或執行您自己的 `SELECT` 查詢。