我想使用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';
存储这些文件的任何前进路径?
答案 0 :(得分:2)
Hive有很长的列定义问题。默认情况下,支持的最大字符数为4000,因此,如果您确实需要更多字符,则必须通过延长COLUMNS_V2.TYPE_NAME的长度来更改Metastore数据库。
如果您想了解有关该问题的更多信息,请访问此链接:
答案 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。保存更改,重新启动服务并重新创建表。