2013-08-02 15 views
6

में नेस्टेड संग्रह आइटम को परिभाषित करने के लिए कैसे मैं नेस्टेड संग्रह आइटम के साथ एक हाइव टेबल बनाने की कोशिश कर रहा हूं। मान लीजिए मेरे पास संरचना की एक सरणी है।हाइव

CREATE TABLE SAMPLE(
    record array<struct<col1:string,col2:string>> 
    )row format delimited 
    fields terminated by ',' 
    collection items terminated by '|'; 

पहला स्तर, विभाजक ',' डिफ़ॉल्ट डिलीमीटर '^ ए' को ओवरराइड करेगा।

दूसरा स्तर, विभाजक '|' बाहरी सबसे अधिक संरचना (यानी ऐरे) को अलग करने के लिए डिफ़ॉल्ट द्वितीय स्तर के डिलीमीटर '^ बी' को ओवरराइड करेगा।

तीसरे स्तर छत्ता संरचना हेतु विभाजक के रूप में डिफ़ॉल्ट तीसरे स्तर सीमांकक '^ सी' का उपयोग करेगा

अब मेरे सवाल है मैं दूसरे स्तर (यानी Struct) के लिए एक विभाजक कैसे परिभाषित कर सकते हैं, क्योंकि '^ सी 'चरित्र पढ़ने के साथ ही उत्पन्न करने के लिए मुश्किल है।

क्या^सी के बजाय विभाजक को स्पष्ट रूप से परिभाषित करने का कोई तरीका है?

अग्रिम धन्यवाद। इस तरह

उत्तर

10

कोशिश कुछ:

CREATE TABLE SAMPLE(
id BIGINT, 
record array<struct<col1:string,col2:string>> 
)row format delimited 
fields terminated by ',' 
collection items terminated by '|' 
map keys terminated by ':'; 

अब आप पाठ फ़ाइल में डेटा इस तरह दिखेगा:

1345653,110909316904:1341894546|221065796761:1341887508 

इसके बाद आप क्वेरी कर सकता है इसे पसंद:

select record.col1 from SAMPLE; 
+0

अच्छा जवाब मुकेश – saching