Hive 报错 INSERT INTO “PARTITION_PARAMS” (“PARAM_VALUE”,“PART_ID”,“PARAM_KEY”) VALUES (?,?,?)

问题背景

Hive 中加工了几张大表, 每张都大约有 350 个字段左右. 并且因为业务原因每个字段都比较长 (大约20个字符左右, 有长有短, 最长可达30多个字符). 加工完成, 多次确认不存在语法错误后运行, 仍然报错.

此时,这几张运行失败的表有共同特点, 可以作为后续处理失败的突破点: 每张表的字段很多, 且每个字段都很长.


报错信息

[ERROR] Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask. MetaException(message:Put request failed : INSERT INTO "PARTITION_PARAMS" ("PARAM_VALUE","PART_ID","PARAM_KEY") VALUES (?,?,?) )


问题定位

通过后台日志发现具体报错信息:
在这里插入图片描述

  1. 报错显示: PostgreSQL Error, 值太长.
  2. 联想到, 我们 Hive 的元数据库就是使用 PostgreSQL 引擎, 那说明是元数据中的表出现问题(INSERT INTO "PARTITION_PARAMS" ("PARAM_VALUE","PART_ID","PARAM_KEY") VALUES (?,?,?) )
  3. 进入元数据库中, 查找 PARTITION_PARAMS 表, 找到问题.
    在这里插入图片描述

产生原因

经过一番分析, 原来是 Hive 在元数据库中对每张表所有字段长度的累加总长度有限制, 如上图为 varchar(4000). 而我们今天加工的几张表字段总长≈350*20=7000, 导致实际存储字段总长大于定义.


解决

修改元数据库中的 PARTITION_PARAMSPARAM_VALUE 字段对应值:

alter table "PARTITION_PARAMS" alter column "PARAM_VALUE" type varchar(8000);

至此, 再次执行则均运行成功!

或者, 另一种处理思路: 加工太大的表可以使用拆分成几个小表, 在使用时再通过主键关联.

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值