2012-07-07 18 views
30

में Struct की सरणी यह ​​हाइव टेबल नीचेहाइव

CREATE EXTERNAL TABLE IF NOT EXISTS SampleTable 
(
USER_ID BIGINT, 
NEW_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>> 
) 

है विस्फोट और यह ऊपर टेबल

1015826235  [{"product_id":220003038067,"timestamps":"1340321132000"},{"product_id":300003861266,"timestamps":"1340271857000"}] 

में डेटा है वहाँ किसी भी तरह से मैं नीचे उत्पादन प्राप्त कर सकते हैं है सरणी विस्फोट के बाद HiveQL से?

**USER_ID** | **PRODUCT_ID** | **TIMESTAMPS** 
------------+------------------+---------------- 
1015826235  220003038067  1340321132000 
1015826235  300003861266  1340271857000 

मैं ऊपर प्रारूप में उत्पादन प्राप्त करने के लिए इस क्वेरी लिखा अपडेट किया गया है, लेकिन यह मुझे तरह से मैं करना चाहता था में परिणाम दे रही है नहीं है।

SELECT myTable1.myCol1,myTable2.myCol2 FROM sampletable st LATERAL VIEW 
explode(st.purchased_item.product_id) myTable1 AS myCol1 LATERAL VIEW 
explode(st.purchased_item.timestamps) myTable2 AS myCol2; 

क्या कोई मेरी मदद कर सकता है कि मैं क्या कर रहा हूं? कोई भी सुझाव प्रशंसनीय होगा।

+0

इस तरह कुछ कैसे? SampleTable पार्श्व विस्फोट (NEW_ITEM) prod_and_ts रूप exploded_table से timestamps के रूप में user_id, product_id रूप prod_and_ts.product_id, prod_and_ts.timestamps का चयन करें; –

+0

@ मार्क, धन्यवाद मार्क, यह काम करता है, क्या आप इसे एक उत्तर के रूप में पोस्ट कर सकते हैं ताकि मैं इसे स्वीकार कर सकूं। और क्या आप कृपया इस SO प्रश्न में भी एक नज़र डालें। [http://stackoverflow.com/questions/11336950/joining-two-tables-in-hive-using-hiveqlhadoop](http://stackoverflow.com/questions/11336950/joining-two-tables-in-hive- का उपयोग कर-hiveqlhadoop)। जैसा कि किसी ने अभी तक इस सवाल पर जवाब नहीं दिया है। यह मेरे लिए बहुत मददगार होगा। आपके समय के लिए धन्यवाद। – ferhan

+0

खुशी हुई यह मदद की। जवाब पोस्ट किया गया। जल्द ही दूसरे प्रश्न पर नजर डालेंगे! –

उत्तर

63

आपको केवल एक बार विस्फोट करने की आवश्यकता है (लैटरल दृश्य के साथ)। विस्फोट के बाद आप एक नए कॉलम का उपयोग कर सकते हैं (जिसे मेरे उदाहरण में prod_and_ts कहा जाता है) जो संरचना प्रकार का होगा। फिर, वांछित परिणाम पुनर्प्राप्त करने के लिए आप इस नए स्ट्रक्चर कॉलम के product_id और टाइमस्टैम्प सदस्यों को हल कर सकते हैं।

SELECT 
    user_id, 
    prod_and_ts.product_id as product_id, 
    prod_and_ts.timestamps as timestamps 
FROM 
    SampleTable 
    LATERAL VIEW explode(new_item) exploded_table as prod_and_ts; 
+0

की एक सरणी बनाने में मदद कर सकते हैं और एक और सवाल मैंने पोस्ट किया है, क्योंकि यह प्रदर्शन माप से संबंधित सैद्धांतिक प्रश्न है। [http://stackoverflow.com/questions/11404163 /custom-mapper-and-reducer-vs-hiveql](http://stackoverflow.com/questions/11404163/custom-mapper-and-reducer-vs-hiveql)। मैं क्षमा चाहता हूं अगर मैं आपको इतनी परेशान कर रहा हूं कि एसओ पर, वहां इतना बड़ा डेटा विशेषज्ञ नहीं है। इसलिए यही कारण है कि मैं आपको पिंग कर रहा हूं। वास्तव में आपकी सभी मदद की सराहना की ... – ferhan

+0

हाय मार्क, आपकी सभी मदद के लिए धन्यवाद। मैंने हाइव में स्ट्रक्चर के विस्फोटक ऐरे से संबंधित एक ही प्रश्न पोस्ट किया है लेकिन इस बार डेटा कुछ अलग है। क्या आप इसे देख सकते हैं कि ऐसा करना संभव है? [Http://stackoverflow.com/questions/11550651/exploding-array-of-struct-using-hiveql](http://stackoverflow.com/questions/11550651/exploding-array-of-struct-using-hiveql) – ferhan

+0

हाय मार्क, हम एकाधिक सरणी > कॉलम के लिए दृश्य कैसे विस्फोट और बना सकते हैं। क्या आप कृपया मेरे अनुरोध पर सहायता कर सकते हैं http://stackoverflow.com/questions/37282646/how-to-create-view-for-struct-fields-in-hive –

10

आप हाइव 0.10 पर या बाद में कर रहे हैं, तो आप भी inline(ARRAY<STRUCT[,STRUCT]>) इस्तेमाल कर सकते हैं। यह एक टेबल में structs की एक सरणी विस्फोट करता है।

+0

यह एक उपयोगी उत्तर है, लेकिन यह सवाल का पूरी तरह उत्तर नहीं देता है। इस प्रकार, शीर्ष-स्तरीय फ़ील्ड, यानी 'USER_ID' परिणाम में नहीं है। – jkukul

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