Hive - 列类型名称太长

时间:2016-04-26 21:03:08

标签: hadoop hive

我想使用rcongiu的hive-json-serde来存储符合开放标准的非平凡JSON文档。我使用了Michael Peterson方便的hive-json-schema生成器来生成一个应该有效的CREATE TABLE语句,除了它的大小。

我编码的JSON文档遵循定义良好的架构,但架构可能包含一百个字段,最多嵌套四层。与标准匹配的Hive列类型非常非常长(大约3700个字符),当我运行生成的create table语句时,我收到错误

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
InvalidObjectException(message:Invalid column type name is too long: <the
really long type name>)

声明如下:

CREATE TABLE foobar_requests (
  `event_id` int,
  `client_id` int,
  `request` struct<very long and deeply nested struct definition>,
  `timestamp` timestamp)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe';

存储这些文件的任何前进路径?

3 个答案:

答案 0 :(得分:2)

Hive有很长的列定义问题。默认情况下,支持的最大字符数为4000,因此,如果您确实需要更多字符,则必须通过延长COLUMNS_V2.TYPE_NAME的长度来更改Metastore数据库。

如果您想了解有关该问题的更多信息,请访问此链接:

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

答案 1 :(得分:2)

通过Ambari&gt;添加以下属性Hive&gt;配置&gt;高级&gt;自定义蜂巢站点:
hive.metastore.max.typename.length = 14000

答案 2 :(得分:1)

当“列类型”之一的名称长于默认的2000个字符时,就会出现此问题。 解: 要解决此问题,请执行以下操作:1.通过Ambari> Hive>配置>高级>自定义配置单元站点添加以下属性:hive.metastore.max.typename.length = 10000

上面的值是一个示例,需要根据特定的用例进行调整。

2。保存更改,重新启动服务并重新创建表。