准备
创建 student 表
create table if not exists t_student2( id int, name string
)
row format delimited fields terminated by ',' ;
修改表名
ALTER TABLE 原表名 RENAME TO 新表名
例子
alter table t_student rename to t_student2;
管理表(内部表)
修改内部表的表名,hdfs的相应目录也会跟着修改
外部表
修改外部表的表名,hdfs相应目录 不会改变(不论建表时是否指定 hdfs 路径)
修改列名、类型
ALTER TABLE table_name CHANGE [COLUMN] 原列名 新列名 column_type [COMMENT col_comment] [FIRST|AFTER column_name]
例子:修改列名
alter table t_student change id nid string;
注意: 新列名后面 必须跟着类型,否则报错
例子:修改类型
alter table t_student change id id string;
注意:
- int类型改成string类型,能够成功
- int字段可以改为double类型字段
- double类型不可以改为 int型
- string类型改成int类型,会报错
- 任何类型基本都可以转为字符串
添加列
ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment], ...)
注: ADD 是代表新增一字段,字段位置在所有列后面(partition 列前)
例子
查询表结构:
desc t_student;
添加列:
alter table t_student add columns(sex int);
替换列
按照括号中的顺序,将表的所有列进行替换
ALTER TABLE table_name REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
注意: 替换表中所有字段
例子
alter table t_student replace columns(sid string,sname string,sex string);
查看表结构:
desc t_student;
例子:删除列
通过替换列功能,可实现 删除列,但 不会删除 hdfs 中的数据
alter table t_student replace columns(sid string);
查看表结构:
desc t_student;
执行结果:
sid string
只有一列
查询数据:
select * from t_student;
只能查询出一列
1
1
2
2
3
但 hdfs 中的数据没变