2016-04-22 10 views
9

के साथ निर्देशिका को ओवरराइट करें मैं जेसन स्कीमा के साथ निर्देशिका को ओवरराइट कैसे सम्मिलित कर सकता हूं?HIVE सम्मिलित करें जेसन प्रारूप

कच्चे हाइव एवरो टेबल है; (यह वास्तव में है कई क्षेत्रों है)

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 

लेकिन लिखित जेसन इन/जेसन/मूल क्षेत्र के नाम के बजाय _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

मुझे एवीआरओ प्रारूप के साथ एक ही समस्या का सामना करना पड़ रहा है। क्या आपको समाधान मिला है? अगर आपको कोई कामकाज पता है तो कृपया मुझे बताएं। – Munesh

+0

एवरो आउटपुट फ़ोटमार या टेबल प्रारूप है? मैं छिद्र पर कोई काम नहीं कर सका। इसके बजाय मैंने स्पार्क द्वारा ऐसा किया। स्पार्क एसक्यूएल चलाएं और फिर जेएससन के रूप में डेटाफ्रेम निर्यात करें। स्पार्क एक प्रकृति में विभिन्न निर्यात प्रारूप का समर्थन करते हैं। –

+0

एवीआरओ आवश्यक आउटपुट फ़ाइल प्रारूप है। हां, स्पार्क एक अच्छा कामकाज है। – 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 
; 

इसके अलावा, आप JsonSerDe आधारित तालिका बना सकते हैं, insert overwrite यह और निर्देशिका के बजाय तालिका स्थान का उपयोग ।

संबंधित मुद्दे