📜  Impala-更改表

📅  最后修改于: 2020-11-30 05:02:24             🧑  作者: Mango


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中获得表的列表,则可以在其中找到客户表,如下所示。

[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语句更改表名的示例。在这里,我们将表客户的名称更改为用户。

[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 table语句验证当前数据库中的表列表。您可以找到名为用户而不是客户的表。

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 ...])

以下查询是一个示例,演示了如何向现有表中添加列。在这里,我们向用户表添加了两列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)

如果您验证表用户的架构,则可以在其中找到新添加的列,如下所示。

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到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,并将其数据类型更改为字符串

[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语句,然后单击执行按钮,如以下屏幕截图所示。

修改表格

执行上述查询时,它将表客户的名称更改为users 。以同样的方式,我们可以执行所有的alter查询。