Impala中的Alter表语句用于对给定表执行更改.使用此语句,我们可以添加,删除或修改现有表中的列,我们也可以重命名它.
本章通过语法和示例解释各种类型的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 语句更改表名称的示例.在这里,我们将表 customers 的名称更改为用户.
[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 语句.您可以找到名为用户的表,而不是客户.
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
如果验证表用户的架构,则不能找到名为 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 to 更改现有表中列的名称和数据类型如下 :
ALTER TABLE name CHANGE column_name new_name new_type
以下是使用列更改列的名称和数据类型的示例改变声明.在这里,我们将列 phone_no的名称更改为电子邮件,将其数据类型更改为字符串.
[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 查询.