यद्यपि INSERT OVERWRITE
हाइव से डेटा प्राप्त करने के लिए इसका उपयोग करना संभव है , यह आपके विशेष मामले के लिए सबसे अच्छा तरीका नहीं हो सकता है। पहले मुझे समझाते हैं कि क्या INSERT OVERWRITE
करता है, फिर मैं हाइव तालिकाओं से tsv फ़ाइलों को प्राप्त करने के लिए उपयोग की जाने वाली विधि का वर्णन करूँगा।
मैनुअल के अनुसार , आपकी क्वेरी HDFS में एक निर्देशिका में डेटा संग्रहीत करेगी। प्रारूप csv नहीं होगा।
फाइलसिस्टम के लिए लिखे गए डेटा को ^ ए द्वारा अलग किए गए स्तंभों के साथ पाठ के रूप में क्रमबद्ध किया जाता है और न्यूलाइन्स द्वारा अलग की गई पंक्तियाँ। यदि कोई भी स्तंभ आदिम प्रकार के नहीं हैं, तो उन स्तंभों को JSON प्रारूप में क्रमबद्ध किया जाता है।
एक मामूली संशोधन ( LOCAL
कीवर्ड को जोड़ना ) डेटा को स्थानीय निर्देशिका में संग्रहीत करेगा।
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' select books from table;
जब मैं एक समान क्वेरी चलाता हूं, तो यहां आउटपुट कैसा दिखता है।
[lvermeer@hadoop temp]$ ll
total 4
-rwxr-xr-x 1 lvermeer users 811 Aug 9 09:21 000000_0
[lvermeer@hadoop temp]$ head 000000_0
"row1""col1"1234"col3"1234FALSE
"row2""col1"5678"col3"5678TRUE
निजी तौर पर, मैं आमतौर पर इस तरह की चीज़ के लिए कमांड लाइन पर हाइव के माध्यम से सीधे अपनी क्वेरी चलाता हूं, और इसे स्थानीय फ़ाइल में पाइप करता हूं जैसे:
hive -e 'select books from table' > /home/lvermeer/temp.tsv
वह मुझे एक टैब-अलग फ़ाइल देता है जिसका मैं उपयोग कर सकता हूं। आशा है कि आप के लिए भी उपयोगी है।
इस पैच -3682 के आधार पर , मुझे संदेह है कि हाइव 0.11 का उपयोग करते समय एक बेहतर समाधान उपलब्ध है, लेकिन मैं स्वयं इसका परीक्षण करने में असमर्थ हूं। नए सिंटैक्स को निम्नलिखित की अनुमति देनी चाहिए।
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select books from table;
उम्मीद है की वो मदद करदे।