ALTER TABLE REPLACE COLUMNS - Amazon Athena

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

次の例での (LazySimpleSerDe により作成された) テーブル names_cities には、col1col2、および col3 という名前の 3 つの列があります。すべての列の型は string です。テーブル内の列を表示するために、次のコマンドでは SHOW COLUMNS ステートメントを使用しています。

SHOW COLUMNS IN names_cities

クエリの結果:

col1 col2 col3

次の ALTER TABLE REPLACE COLUMNS コマンドでは、列の名前を first_namelast_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 クエリエディタでテーブルをプレビューする、または独自のSELECTクエリを実行することもできます。