2016-04-22 7 views
9

jsonスキーマで上書きするディレクトリを挿入するにはどうすればよいですか?HIVE json形式の上書きディレクトリを挿入します

生ハーブavroテーブルがあります。 (これは実際に多くのフィールドがあります)

tb_test-------- 
name string 
kickname string 
----------------- 

私はjsonserdeでHDFS内のいくつかのディレクトリにクエリ結果を保存したいです。

私はこれを試しました。

insert overwrite directory '/json/' 
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' 
WITH SERDEPROPERTIES (
"stat_name"="$._col0", 
"stat_interval"="$._col1" 
) 
STORED AS TEXTFILE 
select name, nickname 
from tb_test limit 100 

しかし、/ json /に書かれたjsonは、起点フィールド名の代わりに_colXXフィールド名を持っています。

{"_col0":"basic_qv"," _col1":"h"} 
{"_col0":"basic_qv","_col1 ":"h"} 
{"_col0":"basic_qv","_col1 ":"h"} 
{"_col0":"basic_qv"," _col1":"h"} 
{"_col0":"basic_qv","_col1 ":"h"} 

私はこれを助ける何

{"name":"basic_qv","nickname":"h"} 
{"name":"basic_qv","nickname":"h"} 
{"name":"basic_qv","nickname":"h"} 
{"name":"basic_qv","nickname":"h"} 
{"name":"basic_qv","nickname":"h"} 

を期待?

ありがとうございます!

+0

私はAVRO形式で同様の問題に直面しています。あなたは解決策を見つけましたか?回避策がわかっている場合はお知らせください。 – Munesh

+0

はavro出力のfotmarまたはtable形式ですか?私はハイブの回避策を見つけることができませんでした。代わりに私は火花でこれをしました。 spark sqlを実行し、データフレームをjsonとしてエクスポートします。自然の中でさまざまな輸出フォーマットをサポートします。 –

+0

AVROは必要な出力ファイル形式です。はい、Sparkは良い回避策です。 – Munesh

答えて

1

(named_structでJsonUDFを使用して)回避策を使用して問題がここで説明されているようだ:https://github.com/rcongiu/Hive-JSON-Serde/issues/151

extract.hql: 
add jar /home/myuser/lib/json-udf-1.3.8-SNAPSHOT-jar-with-dependencies.jar; 
create temporary function tjson as 'org.openx.data.udf.JsonUDF'; 

insert overwrite local directory '/json/' 
select 
tjson(named_struct("name", t.name,"nickname", t.nickname)) 
from tb_test t 
; 

また、あなたはそれがinsert overwrite、定義された列でJsonSerDeベースのテーブルを作成し、代わりにディレクトリのテーブルの場所を使用することができます。

関連する問題