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
(複数形で columns を含む形式) とする必要があることに注意してください。置き換えの対象である列だけでなく、維持しておく列も指定する必要があります。これを行わない場合、指定されていない列は削除されます。この構文と動作は Apache Hive DDL から派生したものです。リファレンスについては、Apache ドキュメントの「Add/Replace Columnstable-name
REPLACE COLUMNS」(列の追加/置換) を参照してください。
例
次の例での (LazySimpleSerDe により作成された) テーブル names_cities
には、col1
、col2
、および col3
という名前の 3 つの列があります。すべての列の型は string
です。テーブル内の列を表示するために、次のコマンドでは SHOW COLUMNS ステートメントを使用しています。
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 クエリエディタでテーブルをプレビューする、または独自のSELECT
クエリを実行することもできます。