Impala 修改表
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 |
+-----------+
修改表名
语法
ALTER TABLE 重命名现有表的基本语法如下-
ALTER TABLE [old_db_name.]old_table_name RENAME TO [new_db_name.]new_table_name
示例
以下是使用
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
向表中添加列
语法
ALTER TABLE 向现有表添加列的基本语法如下-
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
示例
以下查询是一个示例,演示如何向现有表添加列。在这里,我们向
users 表添加了两列 account_no 和 phone_number(均为 bigint 数据类型)。
[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
从表中删除列
语法
ALTER TABLE to
DROP COLUMN 在现有表中的基本语法如下-
ALTER TABLE name DROP [COLUMN] column_name
示例
以下查询是从现有表中删除列的示例。这里我们删除名为
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
更改列的名称和类型
语法
ALTER TABLE
更改现有表中列的名称和数据类型的基本语法如下-
ALTER TABLE name CHANGE column_name new_name new_type
示例
以下是使用 alter 语句更改列的名称和数据类型的示例。在这里,我们将
phone_no 列的名称更改为 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
使用色调改变表格
打开 Impala 查询编辑器并在其中键入
alter 语句,然后单击执行按钮,如下面的屏幕截图所示。
执行上述查询时,它会将表
customers 的名称更改为
users。以同样的方式,我们可以执行所有
alter 查询。