hive3新增資料_Hive表新增字段后,新字段无法写入值问题总结

问题描述

今天同事让我把订单表新增一个字段,我新增好字段后,重跑脚本,验证数据的时候发现新增加的那个字段的值都是NULL。脚本通过insert overwrite覆盖T+1的历史数据。

新增字段的sql是这样的

altertable app.app_tar_order_dt addcolumns(brand_name stringCOMMENT'品牌名称');

解决方案

(1)将新增字段的sql改成如下所示,然后执行insert overwrite,再查询发现新增字段有数据了。

altertable app.app_tar_order_dt addcolumns(brand_name stringCOMMENT'品牌名称') cascade;

(2)通过对分区添加字段的方式,将新增字段的sql改成这样如下所示:

altertable app.app_tar_order_dt partition(dt='2020-09-10') add columns(brand_name stringCOMMENT'品牌名称');

(3)可以先将分区删除,然后重新insert overwrite,这样新的字段也会有值。

altertable app.app_tar_order_dt droppartition(dt='2020-09-10');

官方文档描述如下

The CASCADE|RESTRICT clause is available in Hive 1.1.0. ALTER TABLE ADD|REPLACE COLUMNS with CASCADE command changes the columns of a table's metadata, and cascades the same change to all the partition metadata. RESTRICT is the default, limiting column changes only to table metadata.

简单解释下,在Hive 1.1.0版本中可以使用CASCADE和RESTRICT语法,默认情况下是RESTRICT语法,RESTRICT语法只能更新表的元数据;而使用CASCADE语法的命令能同时更新表和分区元数据。

注意:默认的RESTRICT语法对新分区没有影响,新增字段之后,如果是生成新的分区,新增字段会有值,Hive会自动维护新分区中的元数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值