

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

## パラメータ
<a name="parameters"></a>

**PARTITION (partition\_col\_name = partition\_col\_value [,...])**  
ユーザー指定の列名/値の組み合わせでパーティションを指定します。列のデータ型が文字列である場合にのみ、`partition_col_value` を引用符で囲みます。

**REPLACE COLUMNS (col\_name data\_type [,col\_name data\_type,...])**  
既存の列を、指定された列名とデータ型に置き換えます。

## 注意事項
<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` (複数形で *columns* を含む形式) とする必要があることに注意してください。置き換えの対象である列だけでなく、維持しておく列も指定する必要があります。これを行わない場合、指定されていない列は削除されます。この構文と動作は Apache Hive DDL から派生したものです。リファレンスについては、Apache ドキュメントの「[Add/Replace Columns](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Add/ReplaceColumns)」(列の追加/置換) を参照してください。

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

次の例での ([LazySimpleSerDe](lazy-simple-serde.md) により作成された) テーブル `names_cities` には、`col1`、`col2`、および `col3` という名前の 3 つの列があります。すべての列の型は `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`クエリを実行することもできます。