Hive 错误 - 从表中选择 *;
Posted
技术标签:
【中文标题】Hive 错误 - 从表中选择 *;【英文标题】:Hive error - Select * from table ; 【发布时间】:2016-06-14 17:27:01 【问题描述】:我在 hive 中创建了一个外部表,已成功创建。
create external table load_tweets(id BIGINT,text STRING)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION '/user/cloudera/data/tweets_raw';
但是,当我这样做时:
hive> select * from load_tweets;
我收到以下错误:
失败并出现异常 java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: org.codehaus.jackson.JsonParseException: 意外字符('O'(代码 79)):预期有效值(数字, 字符串, 数组, 对象, 'true', 'false' 或 'null') 在 [来源:java.io.ByteArrayInputStream@5dfb0646;行:1,列:2]**
请建议我如何解决这个问题。是使用flume创建的twitter o/p文件损坏还是其他什么?
【问题讨论】:
请同时提供数据示例。 您没有有效的 JSON 数据 【参考方案1】:您需要做两件事。
1) 将数据放入文件中(可能使用 INSERT)。或者它已经在那里了。无论哪种情况,您都需要
2) 来自 Hive,msck repair table load_tweets;
对于 Hive 表,有关数据的架构和其他元信息存储在所谓的 Hive Metastore 中——它实际上是一个关系数据库。当您对未使用 LOCATION
关键字创建的 Hive 表(即内部而不是外部表)执行操作时,Hive 将自动更新元存储。
但大多数 Hive 用例会导致将数据附加到使用其他进程更新的文件中,因此外部表很常见。如果新分区是在外部创建的,在您可以使用 Hive 查询它们之前,您需要使用 msck repair table <tablename>;
强制元存储与数据的当前状态同步。
【讨论】:
- 请编辑您的答案,msck repair
仅用于在 Metastore 中为表添加新分区。不适用于非分区表中的数据
谢谢;我已经澄清了。文档似乎对此很清楚,但我的经验是 Hive 似乎甚至无法识别外部添加的新数据(例如水槽、hdsf -put
等)。感谢您的提醒。
np :) ,如果没有自动反映在 hive 表上,您还可以使用 analyze table
进行任何元数据更新。以上是关于Hive 错误 - 从表中选择 *;的主要内容,如果未能解决你的问题,请参考以下文章
尝试从表中运行 select count(*) 查询时在配置单元中出错