2013-08-20 5 views
6

निम्नलिखित tutorial के आधार पर, हाइव का मानचित्र प्रकार है। हालांकि, कुछ यूडीएफ या अंतर्निहित फ़ंक्शन के साथ SELECT के माध्यम से, एक नई कुंजी-मूल्य जोड़ी को हाइव मानचित्र में डालने का एक दस्तावेज तरीका प्रतीत नहीं होता है। क्या यह संभव है?मैं एक कुंजी-मूल्य जोड़ी को हाइव मैप में कैसे डाल सकता हूं?

एक स्पष्टीकरण के रूप में, मैं एक मेज एक एकल स्तंभ के साथ foo कहा जाता है लगता है, map टाइप किया, column_containing_map नाम दिया है।

अब मैं एक नई तालिका बनाना चाहता हूं जिसमें एक कॉलम भी है, map टाइप किया गया है, लेकिन मैं एक अतिरिक्त कुंजी-मूल्य जोड़ी रखने के लिए प्रत्येक मानचित्र (जो एक कॉलम के भीतर निहित है) चाहता हूं।

एक क्वेरी इस प्रकार दिखाई देंगे:

CREATE TABLE IF NOT EXISTS bar AS 
SELECT ADD_TO_MAP(column_containing_map, "NewKey", "NewValue") 
FROM foo; 

फिर तालिका barbar में प्रत्येक नक्शे को छोड़कर तालिका foo रूप में एक ही नक्शे होते हैं एक अतिरिक्त कुंजी-मान पेयर होगा।

उत्तर

0

मुझे खेद है, मुझे यह बिल्कुल नहीं मिला। द्वारा कुछ यूडीएफ या अंतर्निर्मित फ़ंक्शन के साथ आपका क्या मतलब है? यदि आप एक तालिका में डालना चाहते हैं जिसमें मानचित्र फ़ील्ड यह किसी अन्य डेटाटाइप के समान है। उदाहरण के लिए:

CREATE TABLE complex1(c1 array<string>, c2 map<int,string>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY '-' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n'; 

मैं भी एक फ़ाइल है com.txt है, जो इस में शामिल है कहा जाता है:

मैं complex1 नामक एक मेज, इस तरह बनाया है मोहम्मद-तारिक, 007:

लोड: बॉन्ड

अब, मैं ऊपर बनाया तालिका में इस डेटा लोड करता हूँ तालिका परिसर में डेटा inpath '/inputs/com.txt';

तो इस तालिका में शामिल हैं:

complex1 से

चयन *;

ठीक

[ "मोहम्मद", "तारिक"] {7: "बॉन्ड"}

समय लिया: 0।062 सेकंड

मेरे पास एक और मेज, कहा जाता complex2: अब

CREATE TABLE complex2(c1 map<int,string>); 

, complex1 से डेटा का चयन करें और complex2 में डालने मैं यह करूँगा करने के लिए:

तालिका में डालने जटिल 2 जटिल 2 से c2 का चयन करें;

जांच पार करने के लिए मेज के लिए स्कैन:

चयन * complex2 से;

ठीक

{7: "बॉन्ड"}

समय लिया: 0.062 सेकंड

HTH

+0

हाय तारिक, कृपया मेरे संपादन को प्रश्न में देखें। – merlin2011

0

मुझे लगता है कि brickhouse से समारोह गठबंधन आपको क्या चाहिए करेंगे। थोड़ा अपने मूल प्रश्न में क्वेरी को संशोधित करने, यह इस

SELECT 
    combine(column_containing_map, str_to_map("NewKey:NewValue")) 
FROM 
    foo; 

इस उदाहरण के साथ सीमा कुछ ऐसा दिखाई देगा, STRING> कि str_to_map एक एमएपी < STRING बनाता है। यदि आपके हाइव मानचित्र में चाबियाँ या मानों के लिए अन्य आदिम प्रकार हैं, तो यह काम नहीं करेगा।

3

मान लें कि आपके पास छात्र तालिका है जिसमें विभिन्न विषयों में छात्र अंक शामिल हैं।

hive> desc student; 
id      string 
name     string 
class     string 
marks     map<string,string> 

आप सीधे नीचे तालिका में मूल्य डाल सकते हैं।

INSERT INTO TABLE student 
SELECT STACK(1, 
'100','Sekar','Mathematics',map("Mathematics","78") 
) 
FROM empinfo 
LIMIT 1; 

यहां 'empinfo' तालिका आपके डेटाबेस में कोई भी तालिका हो सकती है। और परिणाम हैं:

100  Sekar Mathematics  {"Mathematics":"78"} 
+1

का प्रयास किया गया उदाहरण बिल्कुल हाइव MapR 5 पर दिया जाता है और निम्न त्रुटि 'विफल हो गया के रूप में: SemanticException [त्रुटि 10,293]: प्रकार TOK_FUNCTION के डालने मूल्यों अभिव्यक्ति के लिए अस्थायी फ़ाइल बनाने के लिए सम्मिलित/values' में समर्थित बिना नहीं असमर्थ' नक्शा <स्ट्रिंग, स्ट्रिंग> तालिका संरचना में फ़ील्ड, क्वेरी प्रविष्टि मूल्य कोई समस्या नहीं है –

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