2016-04-22 88 views
9

如何使用json模式插入覆蓋目錄?使用json格式的HIVE插入覆蓋目錄

有生蜂房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還是表格格式?我無法在配置單元上找到任何解決方法。相反,我是通過spark做到的。運行spark sql,然後將數據框導出爲json。火花支持各種出口格式的性質。 –

+0

AVRO是必需的輸出文件格式。是的,Spark是一個很好的解決方法。 – Munesh

回答

1

似乎有一種變通方法(使用JsonUDF與named_struct)您的問題說明如下: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 
; 

你也可以創建一個列定義的基於JsonSerDe表,insert overwrite並使用表位置,而不是目錄。