让我们在Hive中导入一个简单的表:
hive> CREATE EXTERNAL TABLE tweets (id BIGINT, id_str STRING, user STRUCT<id:BIGINT, screen_name:STRING>)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.JsonSerde'
LOCATION '/projets/tweets';
OK
Time taken: 2.253 seconds
hive> describe tweets.user;
OK
id bigint from deserializer
screen_name string from deserializer
Time taken: 1.151 seconds, Fetched: 2 row(s)
我无法弄清楚语法错误在哪里:
hive> select user.id from tweets limit 5;
OK
Failed with exception java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: Error evaluating user.id
Time taken: 0.699 seconds
我使用的是Hive版本1.2.1。
答案 0 :(得分:0)
我终于找到了答案。似乎用于序列化/反序列化JSON的JAR存在问题。默认的(Apache)无法在我拥有的数据上做得很好。
我尝试了所有这些典型的JAR(在括号中,用于&#39; ROW FORMAT SERDE&#39;的类):
所有这些都给了我不同的错误。我把它们列在那里,以便下一个人可以谷歌他们:
最后,工作JAR 是json-serde-1.3-jar-with-dependencies.jar,可以找到here。这个正在与&#39; STRUCT&#39;甚至可以忽略一些格式错误的JSON。我还用来创建这个类的表:
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ("ignore.malformed.json" = "true")
LOCATION ...
如果需要,可以从here或here重新编译它。我尝试了第一个存储库,在添加必要的库后,它正在为我编译。存储库最近也已更新。