2016-06-16 4 views
0

Hive表にデータをロードしようとしているときに、私に奇妙に見える動作が発生しました。私のデータは、 "json"という名前の単一の列を含むtwitter_testというテーブルにレコードとしてロードされたJSONオブジェクトで構成されています。Hiveで表を作成し、データを入力してください。

各JSONから3つのフィールドを抽出し、「my_twitter」という新しいテーブルを作成します。私はこのようにコマンドを発行します

CREATE TABLE my_twitter AS SELECT regexp_replace(get_json_object(t.json, '$.body\[0]'), '\n', '') as text, get_json_object(t.json, '$.publishingdate\[0]') as created_at, get_json_object(t.json, '$.author_screen_name\[0]') as author from twitter_test AS t; 

結果は、データを含まない3つの列を持つ表です。ただし、SELECTコマンドだけを実行すると、期待どおりにデータが返されます。

試行錯誤で、私は新しいテーブルにデータを挿入するためにクエリの最後にLIMIT xを追加する必要があることを知りました。問題は、なぜですか? さらに、CREATEが正しく機能するためには、xの行が返されて、SELECTという文が返されていることを事前に知っておく必要があるのは奇妙です。回避策はありますか?

答えて

0

jsonオブジェクトを解析するJSON serdeを使用してこのjsonデータにテーブルを作成すると、簡単に各列を簡単に選択できます。

のJSON serdeにこの提案を

CREATE EXTERNAL TABLE `json_table`(
    A string 
    ,B string 
) 
ROW FORMAT SERDE 
    'org.apache.hive.hcatalog.data.JsonSerDe' 
STORED AS INPUTFORMAT 
    'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
LOCATION 
    'PATH' 
+0

感謝を使用してJSONのテーブルを作成するためのサンプルハイブDDLの下に検索。私はそれを確かに試してみましょう。しかし、問題はより一般的です。 'INSERT OVERWRITE TABLE my_twitter SELECTとして" this "を" created "として、" dummy "を作者として投稿twitter_test LIMIT 1;' 最後に 'LIMIT 1'を削除すると動作しません。 –

関連する問題