当前位置: 首页 > news >正文

hive表修改字段类型没有级连导致历史分区报错

一:问题背景

修改hive的分区表时有级连概念,指字段的最新状态,默认只对往后的分区数据生效,而之前的分区保留历史元数据状态。好处就是修改语句的效率很快,坏处就是如果历史分区的数据还有用,那就回发生分区元数据和表元数据的不一致报错

最终导致:presto或hive任务抽取历史分区会报如下的错误

There is a mismatch between the table and partition schemas. 
The types are incompatible and cannot be coerced. The column 'xxxx' 
in table 'xxxx' is declared as type 'string', 
but partition 'xxxx' declared column 'xxxxx' as type 'double'.

二:想要避免这样的问题,那元数据正确的改动方法,应该是使用hive的客户端,运行修改语句时,带上级连关键字CASCADE,如新增一个字段

alter table table_name add columns (column_1 string,column_2 string) CASCADE

而此时你已经发生没有级连问题时,只能用hive客户端把历史分区整个用alter的方式删掉,重新生成

三:特殊情况

1、如果你改的是一个全量表,此时没有级联的概念,你的修改最多的会导致数据改动时引擎发现已有数据类型和你要改的类型不一样,说白了就是无论做任何修改都要保证元数据的一致性
2、hive在改动字段元数据时一般不做前置检查,只会在你后期使用时报相应的错误,但是随着版本不同,后有前置检查的情况
3、上面这个问题如果你不想重新跑数据,那么情况允许可以使用spark引擎跑任务,因为spark没有级连的概念,始终和表元数据看齐,但是hive或者presto这些引擎有,遇到这样的情况就会报错

http://www.lryc.cn/news/522044.html

相关文章:

  • 云上贵州多彩宝荣获仓颉社区先锋应用奖 | 助力数字政务新突破
  • JS宏进阶:JS宏中的文件系统FileSystem
  • XML序列化和反序列化的学习
  • npm ERR! code CERT_HAS_EXPIRED
  • 30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <5> 5分钟集成好caffeine并使用注解操作缓存
  • 【设计模式-结构型】装饰器模式
  • 分布式数据存储基础与HDFS操作实践(副本)
  • Linux 进程前篇(冯诺依曼体系结构和操作系统)
  • Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器
  • 【C语言】_字符串拷贝函数strcpy
  • 基于 Vue 的拖拽缩放卡片组件:实现思路、方法及使用指南
  • nginx 实现 正向代理、反向代理 、SSL(证书配置)、负载均衡 、虚拟域名 ,使用其他中间件监控
  • Kafka客户端-“远程主机强迫关闭了一个现有的连接”故障排查及解决
  • Node.js - Express框架
  • AWS Lambda
  • mysql 如何快速删除表数据
  • 物联网网关Web服务器--lighttpd服务器部署与应用测试
  • vmware虚拟机配置ubuntu 18.04(20.04)静态IP地址
  • 智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学
  • Flutter插件制作、本地/远程依赖及缓存机制深入剖析(原创-附源码)
  • Python猜数小游戏
  • --- 用java实现一个计时器 ---
  • OPI4A,目标检测,口罩检测,mnn,YoloX
  • C#与Vue2上传下载Excel文件
  • Linux(Centos7)安装Mysql/Redis/MinIO
  • 港科夜闻 | 香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作...
  • 森林网络部署,工业4G路由器实现林区组网远程监控
  • ASP.NET Core - 配置系统之自定义配置提供程序
  • npm、yarn、pnpm包安装器差异性对比
  • 正点原子repo放到自己的git服务器