hive分区表加字段后insert字段为空

hive分区表加字段insert字段为空

原因

哈喽朋友们,昨天又在生产环境遇到一个分区表加字段后,insert 进去字段为空的问题。原因是要在分区表中加字段,一般为了不影响历史数据都通过alter table table_name add columns 加字段,环境依旧是华为云DataArts。

现象

字段加完以后,运行完etl之后,查询发现对应字段竟然都是空的!

赶紧查下select 有没有问题。

代码完全没问题,那问题就出在元数据上。通过show create table table_name 发现字段都add上去在最后呀,为啥?

即便是MSCK repair table table_name 修复元数据也没有用。

表存储格式是PARQUET‌列式存储。

解决方案

加字段时加上一个关键字:CASCADE

这样加上去的字段能够在历史分区上都生效,不然新加的字段只会在新的分区上生效。

sql 复制代码
ALTER TABLE table_name ADD COLUMNS (fk_sbt_spu bigint COMMENT '销售产品id') 
改成 
ALTER TABLE table_name ADD COLUMNS (fk_sbt_spu bigint COMMENT '销售产品id') CASCADE

另外,如果字段已经通过不带CASCADE关键字的add语句加到了分区表上面,咋整?

①通过ALTER TABLE table_name replace columns(保留一个历史字段) CASCADE 把表结构元数据刷掉;

②再ALTER TABLE table_name replace columns(所有最新字段) CASCADE 刷新整个分区表的元数据(含历史分区);

③再执行etl进行数据插入,历史分区新增字段就有数据了。这样就不用重建表了。

最后再跑下select 分区表,结果和第二张图一样,搞定!

相关推荐
Database_Cool_16 小时前
AnalyticDB MySQL vs StarRocks/ByteHouse:云数仓选型指南——全托管 vs 自建方案
数据库·数据仓库·mysql·阿里云
涤生大数据17 小时前
从 ETL 到 Agent:AI数据工程如何搭建企业级“数据工厂“
数据仓库·人工智能·etl
Eileen Seligman18 小时前
0CTF/TCTF 2023 OLAPInfra Nashorn RCE + HDFS UDF RCE
大数据·hadoop·hdfs·ctf·rce
Sonnie0000001(马库斯)18 小时前
【Hadoop之HDFS替换方案】【Haoop远程挂载Cubefs】Cubefs对接Hadoop生态
大数据·hadoop·hdfs
好问者18 小时前
【大数据】:hdfs相关进程启停管理命令
大数据·hadoop·hdfs
段一凡-华北理工大学1 天前
工业领域的Hadoop架构学习~系列文章18:制造业Hadoop应用实践 - 从数据到智能的完整闭环
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁
属鼠哥1 天前
HDFS 短路本地读取系列(二):你以为的「本地读」和真正的「本地读」—getLegacy vs getBlockReaderLocal 的本质差异
大数据·hadoop
段一凡-华北理工大学1 天前
工业领域的Hadoop架构学习~系列文章17:Hadoop性能调优- 调度集群每一分性能
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁
段一凡-华北理工大学2 天前
工业领域的Hadoop架构学习~系列文章15:机器学习与大数据融合 - 工业智能的算法引擎
大数据·人工智能·hadoop·机器学习·架构·工业智能体·高炉炼铁智能化