头歌Alter 表/列 第1关:Hive 的 Alter Table 操作
我将在 Hive 中完成对 employee 表的 Alter 操作。以下是分步解决方案:
步骤 1:进入 Hive 客户端
输入:hive
hive
步骤 2:创建 employee 表
输入:CREATE TABLE employee( id INT, name STRING, department STRING, salary FLOAT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
CREATE TABLE employee(
id INT,
name STRING,
department STRING,
salary FLOAT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';
步骤 3:导入数据
输入:LOAD DATA LOCAL INPATH '/data/workspace/myshixun/data/emp.txt' INTO TABLE employee;
LOAD DATA LOCAL INPATH '/data/workspace/myshixun/data/emp.txt' INTO TABLE employee;
步骤 4:使用 Alter Table 命令修改表结构
4.1 修改 id 列名为 emp_id
输入:ALTER TABLE employee CHANGE id emp_id INT COMMENT 'Employee ID';
ALTER TABLE employee
CHANGE id emp_id INT COMMENT 'Employee ID';
4.2 修改 name 列名为 emp_name
输入:ALTER TABLE employee CHANGE name emp_name STRING COMMENT 'Employee Name';
ALTER TABLE employee
CHANGE name emp_name STRING COMMENT 'Employee Name';
4.3 修改 salary 列数据类型为 double
输入:ALTER TABLE employee CHANGE salary salary DOUBLE COMMENT 'Employee Salary';
ALTER TABLE employee
CHANGE salary salary DOUBLE COMMENT 'Employee Salary';
4.4 新增 hiredate 列
输入:ALTER TABLE employee ADD COLUMNS (hiredate DATE COMMENT 'Employee Hire Date');
ALTER TABLE employee
ADD COLUMNS (hiredate DATE COMMENT 'Employee Hire Date');
验证表结构修改结果
输入:DESCRIBE employee;
DESCRIBE employee;
预期输出结果:
emp_id int from deserializer
emp_name string from deserializer
department string from deserializer
salary double from deserializer
hiredate date from deserializer
如果能解决您的问题,麻烦您点个赞,一键三连!!!
关键操作说明:
-
CHANGE 命令用于修改列名和数据类型
- 语法:
ALTER TABLE table_name CHANGE old_col new_col data_type;
- 示例中保持了 department 列不变,仅修改了需要变更的列
- 语法:
-
ADD COLUMNS 命令用于在表末尾添加新列
- 语法:
ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT 'comment']);
- 新增的 hiredate 列会出现在所有现有列之后
- 语法:
-
注意事项:
- Hive 中修改列名不会影响数据存储
- 修改数据类型时需确保源数据可兼容转换(如 FLOAT→DOUBLE 是安全的)
- 新增列后,现有数据中该列值为 NULL
这些操作完成后,employee 表将符合题目要求的结构,可以通过DESCRIBE employee;
命令验证结果。