2025年HIVE 中的 CASCADE关键字

HIVE 中的 CASCADE关键字才感春来 忽而已夏 THE ROMANCE OF SPRING 简要解释 CASCADE 的中文翻译为 级联 顾名思义就是就是与之有联系的 在针对 HIVE 也就是不仅变更新分区的表结构 metadata 同时也变更旧分区的表结构

大家好,我是讯享网,很高兴认识大家。

“才感春来 忽而已夏🌷”

deff719e73ddf043faeda2a9f7f4b124.png

7330b308620b8314ba68cc3a72c30243.png

bc0100623de8e5a737aec5594bd8d070.png

简要解释

f5df1145d61628feab82a1cacf9e3df0.png

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

2243585f199d4cb54413d9df4c88190a.png

背景说明

c14f92c5d1f8ffc10a4619cb8cde1d3e.png

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

下面是验证步骤

c71c00f7aa99a51e05a96bdd5e4e1674.png

19e4d773c23aa687cff3fd1f8189a25d.png

#创建表,以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");
讯享网

341d95b09e2e488f0bea1fd4e3dc1f32.png

对分区表新增字段

cbf9ac19bfdd089637b171f8120b2462.png

讯享网#新增loc字段 alter table aiops.par_c add columns (loc string);

此时对于历史分区数据loc列都是null

e6de3e556806c02ae3841229f245fd68.png

继续插入数据

a1acfc229281ddffdd54357420e27bce.png

#在新增字段之后分别向历史分区以及新分区插入数据 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");

b653dab164b95aaadbf826120dc9a33c.png

51b4d23ad5a0257ce8ae312cea9db817.png

88ec2c4f8e6840a15b010ec854af310e.png

使用CASCADE关键字

为了列名显示正式可以使用相同的方式再修改回去

讯享网ALTER TABLE aiops.par_c CHANGE COLUMN loc loc2 string CASCADE;

再次查询,发现NULL变成了具体插入的值了,那么问题便解决了

d031247982d47028f1c718ee844c2f5d.png

5e03195d741d8c6877d720ffb4299993.png

总结

349b57bd4195dd4052c30013590849d7.png

特别说明

如果想改变新增的列在某列之后使用after关键字即执行

ALTER TABLE aiops.par_c CHANGE COLUMN loc loc2 string after name CASCADE;

如果存储格式是parquet格式的,那么这新增的列的数据都是null,就会出现问题,如果是普通文本格式则不会出现。

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

b2d54b60d7acb5ab131a0a7e5a2d24b1.png

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

15015b5313b12d1e3214f11caba217a5.png

参考链接:

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

cb577cd3a53344ddaad75a8026ca235e.png

点个在看你最好看

小讯
上一篇 2025-04-11 22:07
下一篇 2025-01-17 08:28

相关推荐

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