2016-06-14 10 views
-1

正常に作成されたハイブで1つの外部テーブルを作成しました。ハイブエラー - テーブルから*を選択します。

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; 

を私は以下のエラーを得た:

Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: org.codehaus.jackson.JsonParseException: Unexpected character ('O' (code 79)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') at [Source: [email protected]; line: 1, column: 2]**

この問題を解決する方法を私に勧めてください。それはflumeを使って作成されたtwitter o/pファイルが壊れていたのでしょうか?

+0

データの例も示してください。 – leftjoin

+0

有効なJSONデータがありません –

答えて

0

さらに2つのことを行う必要があります。

1)(おそらくINSERTを使用して)ファイルにデータを入れます。それとも既にそこにあるのかもしれない。どちらの場合も、あなたはその後、ハイブのテーブルの場合msck repair table load_tweets;

、ハイブから

2)する必要があります、データに関するスキーマやその他のメタ情報は、ハイブメタストアと呼ばれるものに保存されている - それは実際にありますカバーの下にあるリレーショナルデータベースLOCATIONキーワードなしで作成されたHiveテーブル(外部テーブルではなく内部テーブル)に対して操作を実行すると、Hiveは自動的にメタストアを更新します。

ただし、ほとんどのHiveユースケースでは、他のプロセスを使用して更新されるファイルにデータが追加されるため、外部表が共通しています。新しいパーティションが外部で作成されている場合は、ハイブでクエリを実行する前に、msck repair table <tablename>;を使用してメタストアを強制的に現在のデータの状態と同期させる必要があります。

+1

- 回答を編集してください。テーブルのメタストアに新しいパーティションを追加する場合にのみ、 'msck repair'が必要です。非パーティション表のデータではありません – syadav

+0

ありがとうございます。私は明確にした。ドキュメンテーションはこれではっきりしているようですが、私の経験では、Hiveは外部から追加された新しいデータ(flume、 'hdsf -put'など)を認識することさえないようになっています。ヘッドアップをありがとう。 –

+1

np :)、ハイブテーブルに自動的に反映されない場合、メタデータの更新に 'analyze table'を使用することもできます。 – syadav

関連する問題