हाइव क्वेरीज़: ऑर्डर बाय, ग्रुप बाय, डिस्ट्रीब्यूट बाय, Cluster उदाहरण द्वारा
हाइव ETL उद्देश्य के लिए SQL प्रकार की क्वेरी भाषा प्रदान करता है Hadoop फाइल सिस्टम।
हाइव क्वेरी भाषा (HiveQL) हाइव में तालिकाओं, डेटाबेस, क्वेरीज़ के साथ काम करने के लिए SQL प्रकार का वातावरण प्रदान करती है।
हम विभिन्न प्रकार के डेटा हेरफेर और क्वेरी करने के लिए हाइव से जुड़े विभिन्न प्रकार के क्लॉज़ रख सकते हैं। पर्यावरण के बाहर विभिन्न नोड्स के साथ बेहतर कनेक्टिविटी के लिए। HIVE JDBC कनेक्टिविटी भी प्रदान करता है।
हाइव क्वेरीज़ निम्नलिखित सुविधाएँ प्रदान करती है:
- डेटा मॉडलिंग जैसे डेटाबेस, तालिकाओं आदि का निर्माण।
- ETL कार्यक्षमताएं जैसे निष्कर्षण, रूपांतरण, और तालिकाओं में डेटा लोड करना
- जुड़ती विभिन्न डेटा तालिकाओं को मर्ज करने के लिए
- कोड की आसानी के लिए उपयोगकर्ता विशिष्ट कस्टम स्क्रिप्ट
- Hadoop के शीर्ष पर तेज़ क्वेरी टूल
हाइव में तालिका बनाना
इस ट्यूटोरियल के मुख्य विषय पर आगे बढ़ने से पहले, हम एक तालिका बनाएंगे जिसका उपयोग हम अगले ट्यूटोरियल के लिए संदर्भ के रूप में करेंगे।
इस ट्यूटोरियल में, हम 6 कॉलम वाली टेबल “employees_guru” बनाने जा रहे हैं।
उपरोक्त स्क्रीन शॉट से,
- हम 6 कॉलम मानों जैसे कि आईडी, नाम, आयु, पता, वेतन, विभाग के साथ “employees_guru” तालिका बना रहे हैं, जो संगठन “guru” में मौजूद कर्मचारियों से संबंधित है।
- इस चरण में हम employees_guru टेबल में डेटा लोड कर रहे हैं। हम जो डेटा लोड करने जा रहे हैं उसे employees.txt फ़ाइल के अंतर्गत रखा जाएगा
क्वेरी के अनुसार क्रमित करें
HiveQL में ORDER BY सिंटैक्स HiveQL में ORDER BY के सिंटैक्स के समान है एसक्यूएल भाषा।
ऑर्डर बाय वह क्लॉज है जिसका उपयोग हम “SELECT” स्टेटमेंट के साथ करते हैं हाइव क्वेरीज़, जो डेटा को सॉर्ट करने में मदद करता है। ऑर्डर बाय क्लॉज ऑर्डर बाय के साथ उल्लिखित विशेष कॉलम मानों को सॉर्ट करने के लिए हाइव टेबल पर कॉलम का उपयोग करता है। हम जिस भी कॉलम नाम के लिए ऑर्डर बाय क्लॉज को परिभाषित कर रहे हैं, क्वेरी विशेष कॉलम मानों को आरोही या अवरोही क्रम में चुनकर परिणाम प्रदर्शित करेगी।
यदि उल्लिखित ऑर्डर बाय फ़ील्ड एक स्ट्रिंग है, तो यह परिणाम को लेक्सिकोग्राफ़िकल क्रम में प्रदर्शित करेगा। बैक एंड पर, इसे एक ही रिड्यूसर पर पास करना होगा।
उपरोक्त स्क्रीन शॉट से हम निम्नलिखित देख सकते हैं
- यह वह क्वेरी है जो ORDER BY क्लॉज के साथ “employees_guru” टेबल पर विभाग के साथ ORDER BY कॉलम नाम के अनुसार प्रदर्शन करती है। “विभाग” स्ट्रिंग है, इसलिए यह लेक्सिकोग्राफ़िकल ऑर्डर के आधार पर परिणाम प्रदर्शित करेगा।
- यह क्वेरी के लिए वास्तविक आउटपुट है। यदि हम इसे ठीक से देखें, तो हम देख सकते हैं कि क्वेरी निष्पादित करने के लिए विभाग कॉलम जैसे कि एडमिन, वित्त इत्यादि के आधार पर परिणाम प्रदर्शित होते हैं।
सवाल :
SELECT * FROM employees_guru ORDER BY Department;
क्वेरी के आधार पर समूह बनाएं
ग्रुप बाय क्लॉज, ग्रुप बाय के साथ उल्लिखित विशेष कॉलम मानों को समूहीकृत करने के लिए हाइव टेबल पर कॉलम का उपयोग करता है। हम जिस भी कॉलम नाम के लिए “ग्रुपबाय” क्लॉज परिभाषित कर रहे हैं, क्वेरी विशेष कॉलम मानों को समूहीकृत करके परिणामों का चयन और प्रदर्शन करेगी।
उदाहरण के लिए, नीचे दिए गए स्क्रीन शॉट में यह प्रत्येक विभाग में मौजूद कर्मचारियों की कुल संख्या प्रदर्शित करने जा रहा है। यहाँ हमारे पास ग्रुप बाय वैल्यू के रूप में “विभाग” है।
उपरोक्त स्क्रीनशॉट से हम निम्नलिखित देखेंगे
- यह वह क्वेरी है जो GROUP BY खण्ड के साथ “employees_guru” तालिका पर विभाग के साथ GROUP BY स्तंभ नाम के रूप में परिभाषित की जाती है।
- यहाँ दिखाया गया आउटपुट विभाग का नाम है, और विभिन्न विभागों में कर्मचारियों की संख्या है। यहाँ सभी कर्मचारी विशिष्ट विभाग से संबंधित हैं और उन्हें समूहीकृत करके परिणामों में प्रदर्शित किया जाता है। इसलिए परिणाम विभाग का नाम है जिसमें प्रत्येक विभाग में मौजूद कर्मचारियों की कुल संख्या है।
प्रश्न:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
इसके अनुसार क्रमबद्ध करें
सॉर्ट बाय क्लॉज आउटपुट को सॉर्ट करने के लिए हाइव टेबल के कॉलम नामों पर काम करता है। हम क्रम को अवरोही क्रम में सॉर्ट करने के लिए DESC का उल्लेख कर सकते हैं और सॉर्ट के आरोही क्रम के लिए ASC का उल्लेख कर सकते हैं।
इस सॉर्ट बाय में यह रिड्यूसर को फीड करने से पहले पंक्तियों को सॉर्ट करेगा। हमेशा सॉर्ट बाय कॉलम के प्रकार पर निर्भर करता है।
उदाहरण के लिए, यदि स्तंभ प्रकार संख्यात्मक हैं तो यह संख्यात्मक क्रम में क्रमबद्ध होगा, यदि स्तंभ प्रकार स्ट्रिंग हैं तो यह शब्दकोश क्रम में क्रमबद्ध होगा।
उपरोक्त स्क्रीन शॉट से हम निम्नलिखित देख सकते हैं:
- यह वह क्वेरी है जो SORT BY क्लॉज के साथ “employees_guru” टेबल पर “id” के रूप में SORT BY कॉलम नाम के रूप में कार्य करती है। हमने कीवर्ड DESC का उपयोग किया।
- अतः प्रदर्शित आउटपुट “आईडी” के अवरोही क्रम में होगा।
प्रश्न:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
Cluster By का उपयोग Hive-QL में Distribute BY और Sort BY दोनों क्लॉज़ के विकल्प के रूप में किया जाता है।
Cluster BY क्लॉज का उपयोग हाइव में मौजूद टेबल पर किया जाता है। हाइव में कॉलम का उपयोग किया जाता है Cluster रिड्यूसर के बीच पंक्तियों को वितरित करने के लिए। Cluster BY कॉलम कई रिड्यूसर पर जाएंगे।
- यह कई रिड्यूसर में मौजूद मानों के क्रम को क्रमबद्ध करना सुनिश्चित करता है
उदाहरण के लिए, Cluster टेबल employees_guru टेबल के Id कॉलम नाम पर उल्लिखित By क्लॉज। इस क्वेरी को निष्पादित करते समय आउटपुट बैक एंड पर कई रिड्यूसर को परिणाम देगा। लेकिन फ्रंट एंड के रूप में यह Sort By और Distribute By दोनों के लिए एक वैकल्पिक क्लॉज है।
यह वास्तव में बैक एंड प्रक्रिया है जब हम मैप रिड्यूस फ्रेमवर्क के संदर्भ में सॉर्ट बाय, ग्रुप बाय और क्लस्टर बाय के साथ क्वेरी करते हैं। इसलिए यदि हम परिणामों को कई रिड्यूसर में संग्रहीत करना चाहते हैं, तो हम इसका उपयोग करते हैं Cluster के द्वारा।
उपरोक्त स्क्रीन शॉट से हमें निम्नलिखित अवलोकन प्राप्त हो रहे हैं:
- यह वह क्वेरी है जो Id फ़ील्ड मान पर CLUSTER BY क्लॉज़ निष्पादित करती है। यहाँ यह Id मानों पर सॉर्ट प्राप्त करने जा रहा है।
- यह guru_employees सॉर्ट में मौजूद आईडी और नाम प्रदर्शित करता है
प्रश्न:
SELECT Id, Name from employees_guru CLUSTER BY Id;
वितरित करें
डिस्ट्रीब्यूट बाय क्लॉज का उपयोग हाइव में मौजूद टेबल पर किया जाता है। हाइव डिस्ट्रीब्यूट बाय में कॉलम का उपयोग रिड्यूसर के बीच पंक्तियों को वितरित करने के लिए करता है। सभी डिस्ट्रीब्यूट बाय कॉलम एक ही रिड्यूसर में जाएंगे।
- यह सुनिश्चित करता है कि प्रत्येक N रिड्यूसर को कॉलम की गैर-ओवरलैपिंग रेंज मिले
- यह प्रत्येक रिड्यूसर के आउटपुट को सॉर्ट नहीं करता है
उपरोक्त स्क्रीनशॉट से हम निम्नलिखित देख सकते हैं
- DISTRIBUTE BY क्लॉज “empoloyees_guru” टेबल की Id पर कार्य कर रहा है
- आउटपुट में Id, नाम दिखाया जाएगा। बैकएंड पर, यह उसी रिड्यूसर पर जाएगा
प्रश्न:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;