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

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.kler.cn/a/511897.html

相关文章:

  • Ubuntu 22.04.5 修改IP
  • 【博客之星2024年度总评选】年度回望:我的博客之路与星光熠熠
  • 【STM32-学习笔记-4-】PWM、输入捕获(PWMI)
  • kubernetes学习-Service(七)
  • React的应用级框架推荐——Next、Modern、Blitz等,快速搭建React项目
  • GraphRAG: Auto Prompt Tuning 实践
  • iOS 内购接入StoreKit2 及低与iOS 15 版本StoreKit 1 兼容方案实现
  • 【算法学习笔记】34:扩展欧几里得算法
  • nginx伪静态配置解释和Nginx 常见的配置
  • Unreal Engine 5 C++ Advanced Action RPG 十章笔记
  • Git合并多次提交,改成一个简洁的提交历史
  • K8S中Pod控制器之ReplicaSet(RS)控制器
  • android 开发中遇到的小问题整理
  • Android平台如何采集屏幕数据并推送RTMP服务器实现无纸化同屏?
  • 项目实战--网页五子棋(游戏大厅)(3)
  • 如何使用 Redis 作为高效缓存
  • 在swiper中显示echarts图表,echarts的点击事件无效,图例点击也没有反应
  • Maven 快速上手
  • [2025分类时序异常检测指标R-AUC与VUS]
  • Spring Boot依赖管理:Maven与Gradle实战对比
  • NPM 下载依赖超时:npm ERR! RequestError: connect ETIMEDOUT
  • Tensor 基本操作1 | PyTorch 深度学习实战
  • 【Rust自学】13.9. 使用闭包和迭代器改进IO项目
  • 无监督<视觉-语言>模型中的跨模态对齐
  • vue按照官网设置自动导入后ElMessageBox不生效问题
  • 从零开始:Spring Boot核心概念与架构解析