ALTER TABLE
説明
ALTER TABLE
ステートメントは、テーブルのスキーマまたはプロパティを変更します。
RENAME
ALTER TABLE RENAME TO
ステートメントは、データベース内の既存テーブルのテーブル名を変更します。テーブルの名称変更コマンドは、データベース間でテーブルを移動するためには使用できません。同じデータベース内のテーブルの名前を変更するためだけに使用できます。
テーブルがキャッシュされている場合、コマンドはテーブルのキャッシュされたデータをクリアします。次にテーブルにアクセスしたときにキャッシュは遅延ロードされます。さらに
- テーブルの名称変更コマンドは、テーブルを参照するビューなど、テーブルのすべての依存関係のキャッシュを解除します。依存関係は、明示的に再度キャッシュする必要があります。
- パーティションの名称変更コマンドは、それらをキャッシュされたままにして、すべてのテーブル依存関係のキャッシュをクリアします。そのため、それらのキャッシュは、次にアクセスしたときに遅延ロードされます。
構文
ALTER TABLE table_identifier RENAME TO table_identifier
ALTER TABLE table_identifier partition_spec RENAME TO partition_spec
パラメータ
-
table_identifier
テーブル名を指定します。必要に応じてデータベース名で修飾できます。
構文:
[ database_name. ] table_name
-
partition_spec
名前を変更するパーティション。パーティション仕様では、型付きリテラル(例:date'2019-01-02')を使用できます。
構文:
PARTITION ( partition_col_name = partition_col_val [ , ... ] )
ADD COLUMNS
ALTER TABLE ADD COLUMNS
ステートメントは、既存のテーブルに指定された列を追加します。
構文
ALTER TABLE table_identifier ADD COLUMNS ( col_spec [ , ... ] )
パラメータ
-
table_identifier
テーブル名を指定します。必要に応じてデータベース名で修飾できます。
構文:
[ database_name. ] table_name
-
COLUMNS ( col_spec )
追加する列を指定します。
DROP COLUMNS
ALTER TABLE DROP COLUMNS
ステートメントは、既存のテーブルから指定された列を削除します。このステートメントは、v2 テーブルでのみサポートされています。
構文
ALTER TABLE table_identifier DROP { COLUMN | COLUMNS } [ ( ] col_name [ , ... ] [ ) ]
パラメータ
-
table_identifier
テーブル名を指定します。必要に応じてデータベース名で修飾できます。
構文:
[ database_name. ] table_name
-
col_name
列の名前を指定します。
RENAME COLUMN
ALTER TABLE RENAME COLUMN
ステートメントは、既存テーブルの列名を変更します。このステートメントは、v2 テーブルでのみサポートされています。
構文
ALTER TABLE table_identifier RENAME COLUMN col_name TO col_name
パラメータ
-
table_identifier
テーブル名を指定します。必要に応じてデータベース名で修飾できます。
構文:
[ database_name. ] table_name
-
col_name
列の名前を指定します。
ALTER OR CHANGE COLUMN
ALTER TABLE ALTER COLUMN
または ALTER TABLE CHANGE COLUMN
ステートメントは、列の定義を変更します。
構文
ALTER TABLE table_identifier { ALTER | CHANGE } [ COLUMN ] col_name alterColumnAction
パラメータ
-
table_identifier
テーブル名を指定します。必要に応じてデータベース名で修飾できます。
構文:
[ database_name. ] table_name
-
col_name
列の名前を指定します。
-
alterColumnAction
列の定義を変更します。
REPLACE COLUMNS
ALTER TABLE REPLACE COLUMNS
ステートメントは、既存のすべての列を削除し、新しい列のセットを追加します。このステートメントは、v2 テーブルでのみサポートされています。
構文
ALTER TABLE table_identifier [ partition_spec ] REPLACE COLUMNS
[ ( ] qualified_col_type_with_position_list [ ) ]
パラメータ
-
table_identifier
テーブル名を指定します。必要に応じてデータベース名で修飾できます。
構文:
[ database_name. ] table_name
-
partition_spec
置き換えるパーティション。パーティション仕様では、型付きリテラル(例:date'2019-01-02')を使用できます。
構文:
PARTITION ( partition_col_name = partition_col_val [ , ... ] )
-
qualified_col_type_with_position_list
追加する列のリスト
構文:
col_name col_type [ col_comment ] [ col_position ] [ , ... ]
ADD AND DROP PARTITION
ADD PARTITION
ALTER TABLE ADD
ステートメントは、パーティション化されたテーブルにパーティションを追加します。
テーブルがキャッシュされている場合、コマンドはテーブルとそのテーブルを参照するすべての依存関係のキャッシュされたデータをクリアします。キャッシュは、次にテーブルまたは依存関係にアクセスしたときに遅延ロードされます。
構文
ALTER TABLE table_identifier ADD [IF NOT EXISTS]
( partition_spec [ partition_spec ... ] )
パラメータ
-
table_identifier
テーブル名を指定します。必要に応じてデータベース名で修飾できます。
構文:
[ database_name. ] table_name
-
partition_spec
追加するパーティション。パーティション仕様では、型付きリテラル(例:date'2019-01-02')を使用できます。
構文:
PARTITION ( partition_col_name = partition_col_val [ , ... ] )
DROP PARTITION
ALTER TABLE DROP
ステートメントは、テーブルのパーティションを削除します。
テーブルがキャッシュされている場合、コマンドはテーブルとそのテーブルを参照するすべての依存関係のキャッシュされたデータをクリアします。キャッシュは、次にテーブルまたは依存関係にアクセスしたときに遅延ロードされます。
構文
ALTER TABLE table_identifier DROP [ IF EXISTS ] partition_spec [PURGE]
パラメータ
-
table_identifier
テーブル名を指定します。必要に応じてデータベース名で修飾できます。
構文:
[ database_name. ] table_name
-
partition_spec
削除するパーティション。パーティション仕様では、型付きリテラル(例:date'2019-01-02')を使用できます。
構文:
PARTITION ( partition_col_name = partition_col_val [ , ... ] )
SET AND UNSET
SET TABLE PROPERTIES
ALTER TABLE SET
コマンドは、テーブルプロパティを設定するために使用されます。特定のプロパティが既に設定されている場合、これは古い値を新しい値で上書きします。
ALTER TABLE UNSET
は、テーブルプロパティを削除するために使用されます。
構文
-- Set Table Properties
ALTER TABLE table_identifier SET TBLPROPERTIES ( key1 = val1, key2 = val2, ... )
-- Unset Table Properties
ALTER TABLE table_identifier UNSET TBLPROPERTIES [ IF EXISTS ] ( key1, key2, ... )
SET SERDE
ALTER TABLE SET
コマンドは、Hive テーブルの SERDE または SERDE プロパティを設定するために使用されます。特定のプロパティが既に設定されている場合、これは古い値を新しい値で上書きします。
構文
-- Set SERDE Properties
ALTER TABLE table_identifier [ partition_spec ]
SET SERDEPROPERTIES ( key1 = val1, key2 = val2, ... )
ALTER TABLE table_identifier [ partition_spec ] SET SERDE serde_class_name
[ WITH SERDEPROPERTIES ( key1 = val1, key2 = val2, ... ) ]
SET LOCATION And SET FILE FORMAT
ALTER TABLE SET
コマンドは、既存テーブルのファイルの場所とファイル形式を変更するためにも使用できます。
テーブルがキャッシュされている場合、ALTER TABLE .. SET LOCATION
コマンドは、テーブルとそのテーブルを参照するすべての依存関係のキャッシュされたデータをクリアします。キャッシュは、次にテーブルまたは依存関係にアクセスしたときに遅延ロードされます。
構文
-- Changing File Format
ALTER TABLE table_identifier [ partition_spec ] SET FILEFORMAT file_format
-- Changing File Location
ALTER TABLE table_identifier [ partition_spec ] SET LOCATION 'new_location'
パラメータ
-
table_identifier
テーブル名を指定します。必要に応じてデータベース名で修飾できます。
構文:
[ database_name. ] table_name
-
partition_spec
プロパティを設定するパーティションを指定します。パーティション仕様では、型付きリテラル(例:date'2019-01-02')を使用できます。
構文:
PARTITION ( partition_col_name = partition_col_val [ , ... ] )
-
SERDEPROPERTIES ( key1 = val1, key2 = val2, … )
設定する SERDE プロパティを指定します。
RECOVER PARTITIONS
ALTER TABLE RECOVER PARTITIONS
ステートメントは、テーブルのディレクトリ内のすべてのパーティションを復元し、Hiveメタストアを更新します。パーティションを復元するもう1つの方法は、MSCK REPAIR TABLE
を使用することです。
構文
ALTER TABLE table_identifier RECOVER PARTITIONS
パラメータ
-
table_identifier
テーブル名を指定します。必要に応じてデータベース名で修飾できます。
構文:
[ database_name. ] table_name
例
-- RENAME table
DESC student;
+-----------------------+---------+-------+
| col_name|data_type|comment|
+-----------------------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
|# Partition Information| | |
| # col_name|data_type|comment|
| age| int| NULL|
+-----------------------+---------+-------+
ALTER TABLE Student RENAME TO StudentInfo;
-- After Renaming the table
DESC StudentInfo;
+-----------------------+---------+-------+
| col_name|data_type|comment|
+-----------------------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
|# Partition Information| | |
| # col_name|data_type|comment|
| age| int| NULL|
+-----------------------+---------+-------+
-- RENAME partition
SHOW PARTITIONS StudentInfo;
+---------+
|partition|
+---------+
| age=10|
| age=11|
| age=12|
+---------+
ALTER TABLE default.StudentInfo PARTITION (age='10') RENAME TO PARTITION (age='15');
-- After renaming Partition
SHOW PARTITIONS StudentInfo;
+---------+
|partition|
+---------+
| age=11|
| age=12|
| age=15|
+---------+
-- Add new columns to a table
DESC StudentInfo;
+-----------------------+---------+-------+
| col_name|data_type|comment|
+-----------------------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
|# Partition Information| | |
| # col_name|data_type|comment|
| age| int| NULL|
+-----------------------+---------+-------+
ALTER TABLE StudentInfo ADD columns (LastName string, DOB timestamp);
-- After Adding New columns to the table
DESC StudentInfo;
+-----------------------+---------+-------+
| col_name|data_type|comment|
+-----------------------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| LastName| string| NULL|
| DOB|timestamp| NULL|
| age| int| NULL|
|# Partition Information| | |
| # col_name|data_type|comment|
| age| int| NULL|
+-----------------------+---------+-------+
-- Drop columns of a table
DESC StudentInfo;
+-----------------------+---------+-------+
| col_name|data_type|comment|
+-----------------------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| LastName| string| NULL|
| DOB|timestamp| NULL|
| age| int| NULL|
|# Partition Information| | |
| # col_name|data_type|comment|
| age| int| NULL|
+-----------------------+---------+-------+
ALTER TABLE StudentInfo DROP columns (LastName, DOB);
-- After dropping columns of the table
DESC StudentInfo;
+-----------------------+---------+-------+
| col_name|data_type|comment|
+-----------------------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
|# Partition Information| | |
| # col_name|data_type|comment|
| age| int| NULL|
+-----------------------+---------+-------+
-- Rename a column of a table
DESC StudentInfo;
+-----------------------+---------+-------+
| col_name|data_type|comment|
+-----------------------+---------+-------+
| name| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
|# Partition Information| | |
| # col_name|data_type|comment|
| age| int| NULL|
+-----------------------+---------+-------+
ALTER TABLE StudentInfo RENAME COLUMN name TO FirstName;
-- After renaming a column of the table
DESC StudentInfo;
+-----------------------+---------+-------+
| col_name|data_type|comment|
+-----------------------+---------+-------+
| FirstName| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
|# Partition Information| | |
| # col_name|data_type|comment|
| age| int| NULL|
+-----------------------+---------+-------+
-- ALTER OR CHANGE COLUMNS
DESC StudentInfo;
+-----------------------+---------+-------+
| col_name|data_type|comment|
+-----------------------+---------+-------+
| FirstName| string| NULL|
| rollno| int| NULL|
| age| int| NULL|
|# Partition Information| | |
| # col_name|data_type|comment|
| age| int| NULL|
+-----------------------+---------+-------+
ALTER TABLE StudentInfo ALTER COLUMN FirstName COMMENT "new comment";
-- After ALTER or CHANGE COLUMNS
DESC StudentInfo;
+-----------------------+---------+-----------+
| col_name|data_type| comment|
+-----------------------+---------+-----------+
| FirstName| string|new comment|
| rollno| int| NULL|
| age| int| NULL|
|# Partition Information| | |
| # col_name|data_type| comment|
| age| int| NULL|
+-----------------------+---------+-----------+
-- REPLACE COLUMNS
DESC StudentInfo;
+-----------------------+---------+-----------+
| col_name|data_type| comment|
+-----------------------+---------+-----------+
| FirstName| string|new comment|
| rollno| int| NULL|
| age| int| NULL|
|# Partition Information| | |
| # col_name|data_type| comment|
| age| int| NULL|
+-----------------------+---------+-----------+
ALTER TABLE StudentInfo REPLACE COLUMNS (name string, ID int COMMENT 'new comment');
-- After replacing COLUMNS
DESC StudentInfo;
+-----=---------+---------+-----------+
| col_name|data_type| comment|
+---------------+---------+-----------+
| name| string| NULL|
| ID| int|new comment|
| # Partitioning| | |
|Not partitioned| | |
+---------------+---------+-----------+
-- Add a new partition to a table
SHOW PARTITIONS StudentInfo;
+---------+
|partition|
+---------+
| age=11|
| age=12|
| age=15|
+---------+
ALTER TABLE StudentInfo ADD IF NOT EXISTS PARTITION (age=18);
-- After adding a new partition to the table
SHOW PARTITIONS StudentInfo;
+---------+
|partition|
+---------+
| age=11|
| age=12|
| age=15|
| age=18|
+---------+
-- Drop a partition from the table
SHOW PARTITIONS StudentInfo;
+---------+
|partition|
+---------+
| age=11|
| age=12|
| age=15|
| age=18|
+---------+
ALTER TABLE StudentInfo DROP IF EXISTS PARTITION (age=18);
-- After dropping the partition of the table
SHOW PARTITIONS StudentInfo;
+---------+
|partition|
+---------+
| age=11|
| age=12|
| age=15|
+---------+
-- Adding multiple partitions to the table
SHOW PARTITIONS StudentInfo;
+---------+
|partition|
+---------+
| age=11|
| age=12|
| age=15|
+---------+
ALTER TABLE StudentInfo ADD IF NOT EXISTS PARTITION (age=18) PARTITION (age=20);
-- After adding multiple partitions to the table
SHOW PARTITIONS StudentInfo;
+---------+
|partition|
+---------+
| age=11|
| age=12|
| age=15|
| age=18|
| age=20|
+---------+
-- Change the fileformat
ALTER TABLE loc_orc SET fileformat orc;
ALTER TABLE p1 partition (month=2, day=2) SET fileformat parquet;
-- Change the file Location
ALTER TABLE dbx.tab1 PARTITION (a='1', b='2') SET LOCATION '/path/to/part/ways'
-- SET SERDE/ SERDE Properties
ALTER TABLE test_tab SET SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe';
ALTER TABLE dbx.tab1 SET SERDE 'org.apache.hadoop' WITH SERDEPROPERTIES ('k' = 'v', 'kay' = 'vee')
-- SET TABLE PROPERTIES
ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('winner' = 'loser');
-- SET TABLE COMMENT Using SET PROPERTIES
ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('comment' = 'A table comment.');
-- Alter TABLE COMMENT Using SET PROPERTIES
ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('comment' = 'This is a new comment.');
-- DROP TABLE PROPERTIES
ALTER TABLE dbx.tab1 UNSET TBLPROPERTIES ('winner');
-- RECOVER PARTITIONS
ALTER TABLE dbx.tab1 RECOVER PARTITIONS;