Impala 简明教程
Impala - Alter Table
Impala 中的 Alter table 语句用于对给定表执行更改。使用该语句,可以在现有表中添加、删除或修改列,还可以对其进行重命名。
本章讲解了各种 alter 语句,包括语法和示例。首先,假设我们在 Impala 的 my_db 数据库中有一个名为 customers 的表,其中包含以下数据
ID NAME AGE ADDRESS SALARY
--- --------- ----- ----------- --------
1 Ramesh 32 Ahmedabad 20000
2 Khilan 25 Delhi 15000
3 Hardik 27 Bhopal 40000
4 Chaitali 25 Mumbai 35000
5 kaushik 23 Kota 30000
6 Komal 22 Mp 32000
而如果你获取了数据库 my_db 中的表列表,则可以像下面所示的找到 customers 表。
[quickstart.cloudera:21000] > show tables;
Query: show tables
+-----------+
| name |
+-----------+
| customers |
| employee |
| student |
| student1 |
+-----------+
Altering the name of a table
Syntax
ALTER TABLE 用于重命名现有表的语法如下所示:
ALTER TABLE [old_db_name.]old_table_name RENAME TO [new_db_name.]new_table_name
Example
以下是使用 alter 语句更改表名的示例。我们将表 customers 的名称更改为 users。
[quickstart.cloudera:21000] > ALTER TABLE my_db.customers RENAME TO my_db.users;
执行上述查询后,Impala 会根据需要更改表名,并显示以下消息。
Query: alter TABLE my_db.customers RENAME TO my_db.users
你可以使用 show tables 语句验证当前数据库中的表列表。你可以找到名为 users 的表,而不是 customers 。
Query: show tables
+----------+
| name |
+----------+
| employee |
| student |
| student1 |
| users |
+----------+
Fetched 4 row(s) in 0.10s
Adding columns to a table
Example
以下查询演示了如何向现有表添加列。将两列 account_no 和 phone_number(两者都是 bigint 数据类型)添加到 users 表。
[quickstart.cloudera:21000] > ALTER TABLE users ADD COLUMNS (account_no BIGINT,
phone_no BIGINT);
执行上述查询后,将指定列添加到名为 student 的表,并显示以下消息。
Query: alter TABLE users ADD COLUMNS (account_no BIGINT, phone_no BIGINT)
如果你验证表 users 的架构,则可以在其中找到新添加的列,如下所示。
quickstart.cloudera:21000] > describe users;
Query: describe users
+------------+--------+---------+
| name | type | comment |
+------------+--------+---------+
| id | int | |
| name | string | |
| age | int | |
| address | string | |
| salary | bigint | |
| account_no | bigint | |
| phone_no | bigint | |
+------------+--------+---------+
Fetched 7 row(s) in 0.20s
Dropping columns from a table
Example
以下查询是删除现有表中列的示例。删除名为 account_no 的列。
[quickstart.cloudera:21000] > ALTER TABLE users DROP account_no;
执行上述查询后,Impala 会删除名为 account_no 的列,并显示以下消息。
Query: alter TABLE users DROP account_no
如果验证表 users 的架构,由于该列已删除,因此找不到名为 account_no 的列。
[quickstart.cloudera:21000] > describe users;
Query: describe users
+----------+--------+---------+
| name | type | comment |
+----------+--------+---------+
| id | int | |
| name | string | |
| age | int | |
| address | string | |
| salary | bigint | |
| phone_no | bigint | |
+----------+--------+---------+
Fetched 6 row(s) in 0.11s
Changing the name and type of a column
Syntax
在现有表中将列 change the name and datatype 变为 ALTER TABLE 的基本语法如下 −
ALTER TABLE name CHANGE column_name new_name new_type
Example
以下是使用 alter 语句更改列名称和数据类型的一个示例。此处我们更改列 phone_no to email 的名称及其数据类型为 string 。
[quickstart.cloudera:21000] > ALTER TABLE users CHANGE phone_no e_mail string;
在执行上述查询时,Impala 执行指定的更改,显示以下消息。
Query: alter TABLE users CHANGE phone_no e_mail string
你可以使用 describe 语句验证表用户的元数据。你可以观察到 Impala 已对指定列执行了所需的更改。
[quickstart.cloudera:21000] > describe users;
Query: describe users
+----------+--------+---------+
| name | type | comment |
+----------+--------+---------+
| id | int | |
| name | string | |
| age | int | |
| address | string | |
| salary | bigint | |
| phone_no | bigint | |
+----------+--------+---------+
Fetched 6 row(s) in 0.11s