您现在的位置是:首页 > 文章详情

hive-19994 bug java.sql.BatchUpdateException

日期:2021-04-25点击:550

事件背景:

大数据应用跑业务时候,涉及对hive表删除操作。删除过程中,会引起hive metastore报错:java.sql.BatchUpdateException: Cannot delete or update a parent row: a foreign key constraint fails ("hivemetastore_emtig3vtq7qp1tiooo07sb70ud"."COLUMNS_V2", CONSTRAINT "COLUMNS_V2_FK1" FOREIGN KEY ("CD_ID") REFERENCES "CDS" ("CD_ID"))

问题分析:

此为hive 的一个bug,详细信息如

https://issues.apache.org/jira/browse/HIVE-19994

image.png

hive的表元数据存储在mysql中,mysql中两表之间有外键约束(关于mysql外键约束详见下文),导致无法删除。

mysql 外键约束介绍:

l  RESTRICT: 拒绝删除或者更新父表。指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。(mysql创建表时,外键约束默认值)

l  CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADEON UPDATE CANSCADE都被InnoDB所支持。

解决方案:

l  官方推荐解决方案:

更改hive-metastore.jar包中的package.jdo,添加如下内容:

spacer.gif

此行下边添加如下内容:

 </datastore-identity> 此行下边添加如下内容:  <field name="cols" table="COLUMNS_V2" >      <collection element-type="MFieldSchema"/>      <foreign-key name="COLUMNS_V2_FK1" delete-action="cascade"/>      <join>         <primary-key name="COLUMNS_PK">           <column name="COLUMN_NAME"/>   </field>

   l  其他可行方案:(公司采取)

mysql中删除表COLUMNS_V2的外键,重新创建外键,并制定外键约束为ON DELETE CANSCADEON UPDATE CANSCADE

ALTER TABLE COLUMNS_V2 DROP FOREIGN KEY  COLUMNS_V2_FK1
ALTER TABLE COLUMNS_V2 ADD CONSTRAINT COLUMNS_V2_FK1 FOREIGN KEY (CD_ID) REFERENCES CDS(CD_ID)ON DELETE CANSCADE ON UPDATE CANSCADE;


原文链接:https://blog.51cto.com/renzhiyuan/2730580
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章