配置单元错误-从表中选择*;

wmtdaxz3  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(346)

我在配置单元中创建了一个已成功创建的外部表。

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)):在[源:java.io]处应为有效值(数字、字符串、数组、对象、'true'、'false'或'null')。bytearrayinputstream@5dfb0646; 行:1,列:2]**
请告诉我怎么修这个。是使用flume创建的twitter o/p文件已损坏还是其他原因?

k2fxgqgv

k2fxgqgv1#

你还需要做两件事。
1) 将数据放入文件(可能使用insert)。或者它已经在那里了。无论哪种情况,你都需要
2) 从Hive里, msck repair table load_tweets; 对于配置单元表,模式和其他关于数据的元信息存储在所谓的配置单元元存储中——实际上,它是一个隐藏的关系数据库。在不使用 LOCATION 关键字(即内部表,而不是外部表),配置单元将自动更新元存储。
但是大多数配置单元用例都会将数据附加到使用其他进程更新的文件中,因此外部表很常见。如果在外部创建了新分区,则在使用配置单元查询它们之前,需要使用强制metastore与数据的当前状态同步 msck repair table <tablename>; .

相关问题