hive表新增字段无法覆盖写入内容

今天遇到hive表新增字段,以往建表都是建外表,直接drop后,重新创建。

由于这次全部使用内表创建的,所以使用add column功能新增字段。

alter table xy_dw.dw_transaction_eth add columns(type1 string comment '类型');

但是发现,如果已经存在记录的情况下覆盖写入,新添加的字段任然为NUll。

如果是新的记录,则可以写入。

被坑了两天(我一直以为我程序哪里出问题了)终于发现了猫腻。

 

注意:如果创建的是分区表,则在添加新字段时,必须要带上cascade,否则该字段无法进入数据。

根本原因是元数据中带分区表的元数据和hive的实际存储不一致。

alter table xy_dw.dw_transaction_eth add columns(type1 string comment '类型') cascade;

 

如果已经添加了字段,没有带cascade怎么解决呢。

我们可以修改字段,在修改字段名时带上,在修改回来。如下:

alter table xy_dw.dw_transaction_eth change type1 type string comment '类型' cascade;
alter table xy_dw.dw_transaction_eth change type type1 string comment '类型' cascade;

可能使用msck repair table xy_dw.dw_transaction_eth; 也有可能修复,没测试过。

 

posted @ 2021-08-12 15:52  硅谷工具人  阅读(287)  评论(0编辑  收藏  举报
成功之道,在于每个人生阶段都要有不同的目标,并且通过努力实现自己的目标,毕竟人生不过百年! 所有奋斗的意义在于为个人目标实现和提升家庭幸福,同时能推进社会进步和国家目标! 正如古人讲的正心诚意格物致知,修身齐家治国平天下。