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

Syntax

ALTER TABLE 用于向现有表添加列的语法如下所示:

ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])

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

Syntax

ALTER TABLE 用于 DROP COLUMN 现有表中的语法如下所示:

ALTER TABLE name DROP [COLUMN] column_name

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

Altering a Table using Hue

打开 Impala 查询编辑器并在其中输入 alter 语句,然后单击执行按钮,如下面的屏幕截图所示。

altering a table

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