Impala 改变表
Impala 中的 Alter table 语句用于对给定表执行更改。使用此语句,我们可以添加、删除或修改现有表中的列,也可以重命名它。
本章通过语法和示例解释了各种类型的 alter 语句。首先假设我们有一个名为 顾客 in the my_db Impala 中的数据库,包含以下数据
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 [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
你可以使用以下方法验证当前数据库中的表列表 显示表格 陈述。你可以找到名为的表 users 代替 顾客 .
Query: show tables +----------+ | name | +----------+ | employee | | student | | student1 | | users | +----------+ Fetched 4 row(s) in 0.10s
向表中添加列
语法
的基本语法 更改表 向现有表添加列如下:
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
例子
以下查询是演示如何将列添加到现有表的示例。这里我们添加两列 account_no 和 phone_number(都是 bigint 数据类型)到 users table.
[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 的基本语法 删除列 在现有表中如下:
ALTER TABLE name DROP [COLUMN] column_name
例子
以下查询是从现有表中删除列的示例。在这里,我们正在删除名为的列 户口号码 .
[quickstart.cloudera:21000] > ALTER TABLE users DROP account_no;
执行上述查询时,Impala 删除名为 account_no 的列,显示以下消息。
Query: alter TABLE users DROP account_no
如果你验证表的架构 users ,你找不到名为的列 户口号码 因为它被删除了。
[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 发送电子邮件 及其数据类型 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
使用 Hue 更改表格
打开 Impala 查询编辑器并输入 alter 在其中声明并单击执行按钮,如下面的屏幕截图所示。
在执行上述查询时,它将更改表的名称 顾客 to users .同理,我们可以执行所有 alter queries.