计算机系统应用教程网站

网站首页 > 技术文章 正文

hive无法插入数据 hive不支持insert into操作吗

btikc 2024-10-12 10:58:25 技术文章 8 ℃ 0 评论

Hive版本是1.1.0

一天同事在删除一个表有多个分区时,发现插入表非常卡顿。针对这个现象我就模拟了这个过程,先创建一个临时T1表,每个分区插入一条,插入了5w分区数据,然后又再次创建一个T2表也用来插入数据。T1在执行删除分区,同时T2表进行插入分区数据,发现T2插入前面正常,到后面直接抛出异常执行失败。查看hive源码发现修改分区里面嵌套了非常多的事物,十多层。同时观察hive的元数据库,通过mysql后台show engine innodb status,会发现insert获取意向锁时产生等待,等待位置在partition表PARTITIONS_N51索引,日志图如下:

??查看PARTITIONS_N51索引,该索引是基于列LINK_TARGET_ID,同时外关联PARTITIONS表的主键列PART_ID,CONSTRAINT `PARTITIONS_FK3` FOREIGN KEY(`LINK_TARGET_ID`) REFERENCES `partitions` ("PART_ID"),

通过索引信息查询该列就一个值分布,而且这唯一值为NULL,这完全违背了建索引的初衷(一般索引键的选择需要有足够多的不同值)

解决方案,删除PARTITIONS_N51索引

查看高版本hive 1.3发现该索引已经不存在,并且删除了tbl上一个索引也是只有一条为NULL的索引

alter table tbls drop foreign key TBLS_FK3;

drop index TBLS_N51 on tbls;

alter table partitions drop foreign key PARTITIONS_FK3;

drop index PARTITIONS_N51 on partitions;

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表