“才感春来 忽而已夏🌷”



简要解释

接下来我们要验证这个关键字对分区表新增字段之后有什么影响?

背景说明

在生产环境中,由于用户对HIVE知识了解不深,在针对分区表时对表新增字段,没有使用cascade关键字,那么此时对于历史分区无论是使用insert into还是insert overwrite table 插入数据新增的列显示都是null值,那么如何解决?
下面是验证步骤


#创建表,以parquet存储格式存储 create table aiops.par_c( id int , name string,address string,oa string,ob string ) partitioned by (day string); STORED AS PARQUET; #插入数据 insert into aiops.par_c partition(day="") values (1,"tom","nanjin","0a","ob"); insert into aiops.par_c partition(day="") values (2,"jack","hefei1","0a","ob");
讯享网

对分区表新增字段

讯享网#新增loc字段 alter table aiops.par_c add columns (loc string);
此时对于历史分区数据loc列都是null

继续插入数据

#在新增字段之后分别向历史分区以及新分区插入数据 insert into aiops.par_c partition(day="") values (2,"jack","hefei1","0a","ob","loc"); insert into aiops.par_c partition(day="") values (5,"linda","hefei1","0a","ob","loc"); insert into aiops.par_c partition(day="") values (6,"yyx","hefei1","0a","ob","loc");




使用CASCADE关键字
为了列名显示正式可以使用相同的方式再修改回去
讯享网ALTER TABLE aiops.par_c CHANGE COLUMN loc loc2 string CASCADE;
再次查询,发现NULL变成了具体插入的值了,那么问题便解决了


总结

特别说明
如果想改变新增的列在某列之后使用after关键字即执行
ALTER TABLE aiops.par_c CHANGE COLUMN loc loc2 string after name CASCADE;
如果存储格式是parquet格式的,那么这新增的列的数据都是null,就会出现问题,如果是普通文本格式则不会出现。
parquet存储格式在这种操作之后的情况

textfile存储格式这种操作之后的情况

参考链接:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable/PartitionProtections

点个在看你最好看
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/74756.html