1、添加字段:
alter table table_name add columns (column_1 string,column_2 string) CASCADE;
添加之后字段由于hive底层是文件和系列化的设计因此查数据会发现新增的列在所有已有列的后面
2、修改字段
alter table table_name change column 已有列 修改名称 类型 comment '';
3、删除列
Hive不能直接删除列,不然底层系列化就乱了,我们可以通过replace语句来替换整张表的字段,达到同样的效果
set hive.exec.schema.evolution=false;
alter table table_name replace columns(字段1 类型1,字段2 类型2....这里是你期待剩余的所有列信息 注意顺序) CASCADE;
语句中只写想要保留的字段就可以,保险起见可以运行下面的语句复制查询结果中的字段
DESCRIBE FORMATTED 表名
但是!!!!!!!!!!切记!!!!!!!!replace之后旧的数据要回溯,就是重跑一边,因为这只是修改了元数据,你的老数据不出意外的话会发生错位问题,因此你不如直接create一个新表灌进需要的数据之后把旧表删掉,新表改成对于的名字
4、上面的操作的是普通字段
,对于分区字段,hive不提供任务删除的可能,顺序都不能改,因为分区表底层是文件,如果允许你变动了,那么读数据就有问题了,真的想删除只能用新表迁移数据。不过可以新增,新增后数读取时,旧数据的新分区为空