हाइव जॉइन और सबक्वेरी ट्यूटोरियल उदाहरणों के साथ
प्रश्नों में शामिल हों
जॉइन क्वेरीज़ हाइव में मौजूद दो टेबल पर परफ़ॉर्म कर सकती हैं। जॉइन को समझने के लिए Concepts यहाँ स्पष्ट रूप से हम दो तालिकाएँ बना रहे हैं,
- नमूना_जॉइन्स( ग्राहक विवरण से संबंधित )
- Sample_joins1( कर्मचारियों द्वारा किए गए ऑर्डर विवरण से संबंधित)
चरण 1) कर्मचारियों के कॉलम नाम आईडी, नाम, आयु, पता और वेतन के साथ “sample_joins” तालिका का निर्माण
चरण 2) डेटा लोड करना और प्रदर्शित करना
उपरोक्त स्क्रीन शॉट से
- Customers.txt से sample_joins में डेटा लोड करना
- नमूना_जॉइन्स तालिका सामग्री प्रदर्शित करना
चरण 3) sample_joins1 तालिका का निर्माण और डेटा लोड करना, प्रदर्शित करना
उपरोक्त स्क्रीनशॉट से हम निम्नलिखित देख सकते हैं
- Orderid, Date1, Id, Amount स्तंभों के साथ तालिका sample_joins1 का निर्माण
- orders.txt से sample_joins1 में डेटा लोड किया जा रहा है
- sample_joins1 में मौजूद रिकॉर्ड प्रदर्शित करना
आगे बढ़ते हुए हम विभिन्न प्रकार के जोड़ों को देखेंगे जो हमारे द्वारा बनाए गए टेबलों पर किए जा सकते हैं, लेकिन उससे पहले आपको जोड़ों के लिए निम्नलिखित बिंदुओं पर विचार करना होगा।
जॉइन्स में ध्यान देने योग्य कुछ बिंदु:
- केवल समानता जोड़ों की अनुमति है जोड़ों में
- एक ही क्वेरी में दो से अधिक तालिकाओं को जोड़ा जा सकता है
- LEFT, RIGHT, FULL OUTER जॉइन का अस्तित्व ON क्लॉज पर अधिक नियंत्रण प्रदान करने के लिए है, जिसके लिए कोई मिलान नहीं है
- जोड़ विनिमेय नहीं हैं
- जोड़ बाएं-सहयोगी होते हैं, चाहे वे बाएं या दाएं जोड़ हों
विभिन्न प्रकार के जोड़
जोड़ 4 प्रकार के होते हैं, ये हैं
- आंतरिक रूप से जुड़ा
- बाईं ओर का बाहरी जोड़
- राइट आउटर जॉइन करें
- पूर्ण बाहरी सम्मिलित हों
आंतरिक रूप से जुड़ा:
दोनों तालिकाओं के सामान्य रिकॉर्ड इस इनर जॉइन द्वारा प्राप्त किए जाएंगे।
उपरोक्त स्क्रीनशॉट से हम निम्नलिखित देख सकते हैं
- यहां हम मिलान स्थिति (c.Id=o.Id) के साथ तालिकाओं sample_joins और sample_joins1 के बीच JOIN कीवर्ड का उपयोग करके जॉइन क्वेरी निष्पादित कर रहे हैं।
- क्वेरी में उल्लिखित शर्त की जाँच करके दोनों तालिका में मौजूद सामान्य रिकॉर्ड प्रदर्शित करने वाला आउटपुट
प्रश्न:
SELECT c.Id, c.Name, c.Age, o.Amount FROM sample_joins c JOIN sample_joins1 o ON(c.Id=o.Id);
बाईं ओर का बाहरी जोड़:
- हाइव क्वेरी भाषा LEFT OUTER JOIN बायीं तालिका से सभी पंक्तियाँ लौटाता है, भले ही दायीं तालिका में कोई मिलान न हो
- यदि ON क्लॉज दाएं टेबल में शून्य रिकॉर्ड से मेल खाता है, तो जॉइन अभी भी दाएं टेबल से प्रत्येक कॉलम में NULL के साथ परिणाम में एक रिकॉर्ड लौटाता है
उपरोक्त स्क्रीनशॉट से हम निम्नलिखित देख सकते हैं
- यहां हम मिलान स्थिति (c.Id= o.Id) के साथ टेबल sample_joins और sample_joins1 के बीच “LEFT OUTER JOIN” कीवर्ड का उपयोग करके जॉइन क्वेरी निष्पादित कर रहे हैं।उदाहरण के लिये यहाँ हम कर्मचारी आईडी को संदर्भ के रूप में उपयोग कर रहे हैं, यह जाँचता है कि आईडी तालिका के दाएँ और बाएँ दोनों में समान है या नहीं। यह मिलान की स्थिति के रूप में कार्य करता है।
- क्वेरी में उल्लिखित शर्त की जाँच करके दोनों तालिका में मौजूद सामान्य रिकॉर्ड प्रदर्शित करने वाला आउटपुट। उपरोक्त आउटपुट में NULL मान दाएँ तालिका से कोई मान नहीं वाले कॉलम हैं जो कि sample_joins1 है
प्रश्न:
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c LEFT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
दायां बाहरी जोड़:
- हाइव क्वेरी भाषा RIGHT OUTER JOIN दाएं टेबल से सभी पंक्तियाँ लौटाता है, भले ही बाएं टेबल में कोई मिलान न हो
- यदि ON क्लॉज बाएं टेबल में शून्य रिकॉर्ड से मेल खाता है, तो जॉइन अभी भी बाएं टेबल से प्रत्येक कॉलम में NULL के साथ परिणाम में एक रिकॉर्ड लौटाता है
- RIGHT जॉइन हमेशा दाएं टेबल से रिकॉर्ड और बाएं टेबल से मिलान किए गए रिकॉर्ड लौटाता है। यदि बाएं टेबल में कॉलम के अनुरूप कोई मान नहीं है, तो यह उस स्थान पर NULL मान लौटाएगा।
उपरोक्त स्क्रीनशॉट से हम निम्नलिखित देख सकते हैं
- यहां हम मिलान स्थिति (c.Id= o.Id) के साथ टेबल sample_joins और sample_joins1 के बीच “RIGHT OUTER JOIN” कीवर्ड का उपयोग करके जॉइन क्वेरी निष्पादित कर रहे हैं।
- क्वेरी में उल्लिखित शर्त की जाँच करके दोनों तालिका में मौजूद सामान्य रिकॉर्ड प्रदर्शित करने वाला आउटपुट
प्रश्न:
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c RIGHT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
पूर्ण बाहरी जोड़:
यह क्वेरी में दी गई JOIN कंडीशन के आधार पर दोनों तालिकाओं sample_joins और sample_joins1 के रिकॉर्ड को जोड़ता है।
यह दोनों तालिकाओं से सभी रिकॉर्ड लौटाता है और दोनों ओर से मेल खाने वाले लुप्त मानों वाले स्तंभों के लिए NULL मान भरता है।
उपरोक्त स्क्रीन शॉट से हम निम्नलिखित देख सकते हैं:
- यहां हम मिलान स्थिति (c.Id= o.Id) के साथ टेबल sample_joins और sample_joins1 के बीच “FULL OUTER JOIN” कीवर्ड का उपयोग करके जॉइन क्वेरी निष्पादित कर रहे हैं।
- क्वेरी में उल्लिखित शर्त की जाँच करके दोनों तालिकाओं में मौजूद सभी रिकॉर्ड प्रदर्शित करने वाला आउटपुट। यहाँ आउटपुट में शून्य मान दोनों तालिकाओं के स्तंभों से लुप्त मानों को इंगित करता है।
प्रश्न
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c FULL OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
उप-प्रश्न
किसी क्वेरी के भीतर मौजूद क्वेरी को सब क्वेरी के रूप में जाना जाता है। मुख्य क्वेरी सबक्वेरी द्वारा लौटाए गए मानों पर निर्भर करेगी।
सबक्वेरीज़ को दो प्रकारों में वर्गीकृत किया जा सकता है
- FROM क्लॉज में उपक्वेरीज़
- WHERE क्लॉज़ में उपक्वेरीज़
कब इस्तेमाल करें:
- विभिन्न तालिकाओं से दो स्तंभ मानों से संयुक्त एक विशेष मान प्राप्त करने के लिए
- एक तालिका के मानों की अन्य तालिकाओं पर निर्भरता
- अन्य तालिकाओं से एक स्तंभ के मानों की तुलनात्मक जाँच
सिंटेक्स:
Subquery in FROM clause SELECT <column names 1, 2…n>From (SubQuery) <TableName_Main > Subquery in WHERE clause SELECT <column names 1, 2…n> From<TableName_Main>WHERE col1 IN (SubQuery);
उदाहरण:
SELECT col1 FROM (SELECT a+b AS col1 FROM t1) t2
यहाँ t1 और t2 टेबल के नाम हैं। रंगीन वाला टेबल t1 पर की गई सबक्वेरी है। यहाँ a और b ऐसे कॉलम हैं जिन्हें सबक्वेरी में जोड़ा गया है और col1 को असाइन किया गया है। Col1 मुख्य टेबल में मौजूद कॉलम मान है। सबक्वेरी में मौजूद यह कॉलम “col1” कॉलम col1 में मुख्य टेबल क्वेरी के बराबर है।
कस्टम स्क्रिप्ट एम्बेड करना
करंड क्लाइंट की आवश्यकताओं के लिए उपयोगकर्ता विशिष्ट स्क्रिप्ट लिखने की व्यवहार्यता प्रदान करता है। उपयोगकर्ता आवश्यकताओं के लिए अपना स्वयं का मैप और रिड्यूस स्क्रिप्ट लिख सकते हैं। इन्हें एम्बेडेड कस्टम स्क्रिप्ट कहा जाता है। कोडिंग लॉजिक कस्टम स्क्रिप्ट में परिभाषित किया गया है और हम उस स्क्रिप्ट का उपयोग ETL समय में कर सकते हैं।
एम्बेडेड स्क्रिप्ट कब चुनें:
- क्लाइंट विशिष्ट आवश्यकताओं में डेवलपर्स को हाइव में स्क्रिप्ट लिखनी और तैनात करनी होती है
- जहां हाइव इनबिल्ट फ़ंक्शन विशिष्ट डोमेन आवश्यकताओं के लिए काम नहीं करेंगे
इसके लिए हाइव में मैप और रिड्यूसर दोनों स्क्रिप्ट को एम्बेड करने के लिए ट्रांसफॉर्म क्लॉज का उपयोग किया जाता है।
इस एम्बेडेड कस्टम स्क्रिप्ट में, हमें निम्नलिखित बिंदुओं का पालन करना होगा
- कॉलम को स्ट्रिंग में बदल दिया जाएगा और उपयोगकर्ता स्क्रिप्ट को देने से पहले TAB द्वारा सीमांकित किया जाएगा
- उपयोगकर्ता स्क्रिप्ट के मानक आउटपुट को TAB से अलग किए गए स्ट्रिंग कॉलम के रूप में माना जाएगा
नमूना एम्बेडेड स्क्रिप्ट,
FROM ( FROM pv_users MAP pv_users.userid, pv_users.date USING 'map_script' AS dt, uid CLUSTER BY dt) map_output INSERT OVERWRITE TABLE pv_users_reduced REDUCE map_output.dt, map_output.uid USING 'reduce_script' AS date, count;
उपरोक्त स्क्रिप्ट से हम निम्नलिखित देख सकते हैं
यह समझने के लिए केवल नमूना स्क्रिप्ट है
- pv_users वह उपयोगकर्ता तालिका है जिसमें उपयोगकर्ता आईडी और दिनांक जैसे फ़ील्ड हैं जैसा कि map_script में उल्लेख किया गया है
- pv_users तालिकाओं की तिथि और गणना पर परिभाषित रिड्यूसर स्क्रिप्ट