2012-10-30 27 views
8

मेरे पास एचडीएफएस में एक लॉग फ़ाइल है, मान अल्पविराम से सीमित हैं। उदाहरण के लिए:विभाजित तालिका में छिद्र लोडिंग

2012-10-11 12:00,opened_browser,userid111,deviceid222

अब मैं मेज जो कॉलम "टाइमस्टैम्प", "कार्रवाई" है और "उपयोगकर्ता id", "DeviceID" द्वारा विभाजित छत्ता के लिए इस फ़ाइल को लोड करना चाहते हैं। मैं फ़ाइल के लिए विभाजन के रूप में लॉग फ़ाइल में अंतिम 2 कॉलम लेने के लिए हाइव से कैसे पूछ सकता हूं? सभी उदाहरण e.g. "hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');" को स्क्रिप्ट में विभाजन की परिभाषा की आवश्यकता है, लेकिन मैं विभाजन को एचडीएफएस फ़ाइल से स्वचालित रूप से सेट करना चाहता हूं।

एक समाधान सभी 4 कॉलम के साथ इंटरमीडिएट गैर-विभाजित तालिका बनाने के लिए है, इसे फ़ाइल से पॉप्युलेट करें और फिर INSERT into first_table PARTITION (userid,deviceid) select from intermediate_table timestamp,action,userid,deviceid; बनाएं लेकिन यह और अतिरिक्त कार्य है और हमारे पास 2 बहुत ही समान टेबल होंगे .. या हमें बनाना चाहिए मध्यवर्ती के रूप में बाहरी तालिका।

उत्तर

12

Ning Zhang इस विषय पर http://grokbase.com/t/hive/user/114frbfg0y/can-i-use-hive-dynamic-partition-while-loading-data-into-tables पर एक बड़ी प्रतिक्रिया है।

त्वरित संदर्भ है कि:

  1. लोड डेटा बस प्रतियां डेटा, यह इसे पढ़ा नहीं है तो यह समझ नहीं विभाजन क्या
  2. सुझाव है कि आप एक मध्यवर्ती तालिका में डेटा लोड पहले (या सभी फ़ाइलों को इंगित करने वाली बाहरी तालिका का उपयोग करके) और फिर विभाजित तालिका में इसे लोड करने के लिए विभाजन गतिशील डालने को किक करने के लिए
+0

धन्यवाद, डेनी। इस तरह मैंने इस समस्या को हल किया है - बाहरी तालिका का उपयोग करके जो कच्ची फ़ाइल को इंगित करता है और उसके बाद से डेटा चयनित विभाजन के साथ विभाजित तालिका में डाला जाता है। इस तरह के मामले का यह एकमात्र सरल समाधान है। –

+0

कूल सामान - खुशी हुई यह काम किया, आह ?! –

+0

हां, यह एक जादू है :) मैंने इसे एक ही समय में हल किया है जब आपने अपनी टिप्पणी जोड़ा :) शायद आप किसी अन्य मुद्दे के साथ मेरी मदद कर सकते हैं? http://stackoverflow.com/questions/13240409/hadoop-eof-exception-after-map-step –

1

मैंने यह वही परिदृश्य काम किया, लेकिन इसके बजाय, हमने जो किया वह अलग है प्रत्येक विभाजन के लिए एचडीएफएस डेटा फाइलें आपको लोड करने की जरूरत है।

चूंकि हमारा डेटा MapReduce नौकरी से आ रहा है, इसलिए हमने अपने Reducer क्लास में MultipleOutputs का उपयोग डेटा को अपनी संबंधित विभाजन फ़ाइल में मल्टीप्लेक्स करने के लिए किया था। इसके बाद, यह एचडीएफएस फ़ाइल नाम से विभाजन का उपयोग कर स्क्रिप्ट बनाने का मामला है।

0
  1. @Denny ली ​​जवाब में उल्लेख किया है, हम एक मचान तालिका (invites_stg) कामयाब रहे या बाहरी शामिल करने के लिए और फिर विभाजित तालिका में मचान मेज से INSERT (इस मामले में आमंत्रण) की जरूरत है।

  2. यकीन है कि हम करने के लिए सेट इन दो गुण होते हैं बनाओ: सेट hive.exec.dynamoc.partition = सच सेट hive.exec.dynamic.partition.mode = nonstrict

  3. और अंत में निमंत्रण पर डालें, इंसर्ट ओवरराइट टेबल भारत पार्टिशन (राज्य) कॉल का चयन invites_stg से चुनें;

मदद के लिए इस लिंक का संदर्भ लें: http://www.edupristine.com/blog/hive-partitions-example

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