软件开发 网页设计网站,给一个网站风格做定义,服装公司网站多少钱,唯品会专门做特卖的网站一#xff1a;问题背景
修改hive的分区表时有级连概念#xff0c;指字段的最新状态#xff0c;默认只对往后的分区数据生效#xff0c;而之前的分区保留历史元数据状态。好处就是修改语句的效率很快#xff0c;坏处就是如果历史分区的数据还有用#xff0c;那就回发生分…一问题背景
修改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这些引擎有遇到这样的情况就会报错