oracle宽表怎么做,Hive连接超长Hbase宽表异常

当尝试使用Hive连接一个包含150多个字段的HBase表时,遇到了元数据错误,原因是varchar(4000)字段长度不足。通过查询资料,发现这个问题是由于MySQL中SERDE_PARAMS表的PARAM_VALUE字段限制导致的。解决方法是将PARAM_VALUE字段的长度扩大到30000。虽然这解决了MySQL中的问题,但若元数据存储在其他数据库中,类似问题仍会出现。
摘要由CSDN通过智能技术生成

我们用Hive去连接一个Hbase款表,大概有150多个字段。

因此,就报了异常:

FAILED: Error in metadata: MetaException(message:javax.jdo.JDODataStoreException: Put request failed : INSERT INTO `SERDE_PARAMS` (`PARAM_VALUE`,`SERDE_ID`,`PARAM_KEY`) VALUES (?,?,?)

NestedThrowables:

org.datanucleus.store.mapped.exceptions.MappedDatastoreException: INSERT INTO `SERDE_PARAMS` (`PARAM_VALUE`,`SERDE_ID`,`PARAM_KEY`) VALUES (?,?,?) )

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

后来翻了墙,查了谷歌度娘,发现了原因。

在hive元数据中,存放serde信息的是一个varchar(4000)的字段,为了兼容oracle。

但是超过4000个字段怎么办?

目前使用的是mysql数据库,解决方法是将字段扩充成30000如下:

mysql> desc SERDE_PARAMS;

+-------------+---------------+------+-----+---------+-------+

| Field       | Type          | Null | Key | Default | Extra |

+-------------+---------------+------+-----+---------+-------+

| SERDE_ID    | bigint(20)    | NO   | PRI | NULL    |       |

| PARAM_KEY   | varchar(256)  | NO   | PRI | NULL    |       |

| PARAM_VALUE | varchar(4000) | YES  |     | NULL    |       |

+-------------+---------------+------+-----+---------+-------+

3 rows in set (0.03 sec)

mysql> alter table SERDE_PARAMS modify column PARAM_VALUE varchar(30000);

Query OK, 447 rows affected (0.86 sec)

Records: 447  Duplicates: 0  Warnings: 0

mysql> desc SERDE_PARAMS;

+-------------+----------------+------+-----+---------+-------+

| Field       | Type           | Null | Key | Default | Extra |

+-------------+----------------+------+-----+---------+-------+

| SERDE_ID    | bigint(20)     | NO   | PRI | NULL    |       |

| PARAM_KEY   | varchar(256)   | NO   | PRI | NULL    |       |

| PARAM_VALUE | varchar(30000) | YES  |     | NULL    |       |

+-------------+----------------+------+-----+---------+-------+

3 rows in set (0.08 sec)

异常解决。

但是只能暂时解决MySQL库中的问题,加入元数据存在其他库,则还会存在这样的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值