हाइव डेटा प्रकार: हाइव में डेटाबेस कैसे बनाएं और हटाएं
⚡ स्मार्ट सारांश
हाइव डेटा प्रकार यह परिभाषित करते हैं कि प्रत्येक तालिका कॉलम क्या धारण कर सकता है, और CREATE DATABASE और DROP DATABASE कमांड हाइव मेटास्टोर के भीतर उन तालिकाओं के नेमस्पेस को स्थापित या हटाते हैं।

हाइव क्वेरी भाषा और डेटा मॉडलिंग में डेटा प्रकार बहुत महत्वपूर्ण तत्व हैं। टेबल कॉलम प्रकारों को परिभाषित करने के लिए, हमें डेटा प्रकारों और उनके उपयोग के बारे में जानना आवश्यक है।
नीचे हाइव में मौजूद कुछ डेटा प्रकारों का संक्षिप्त विवरण दिया गया है:
- संख्यात्मक प्रकार
- स्ट्रिंग प्रकार
- दिनांक/समय प्रकार
- जटिल प्रकार
हाइव में डेटा प्रकार
प्रत्येक हाइव कॉलम को नीचे दिए गए प्रकारों में से किसी एक के साथ घोषित किया जाता है। सबसे पहले प्रिमिटिव फैमिली आती हैं, उसके बाद कॉम्प्लेक्स टाइप आते हैं जिनमें एक ही कॉलम में एक से अधिक मान होते हैं।
हाइव संख्यात्मक डेटा प्रकार
संख्यात्मक कॉलम का आकार एक बाइट से लेकर आठ बाइट तक होता है, इसलिए मानों के अनुरूप सबसे छोटे प्रकार का चयन करने से भंडारण और स्कैन लागत दोनों कम रहती हैं।
| प्रकार | स्मृति आवंटन |
|---|---|
| टिन्यिन्ट | 1-बाइट हस्ताक्षरित पूर्णांक (-128 से 127) |
| लघु | 2-बाइट हस्ताक्षरित पूर्णांक (-32,768 से 32,767) |
| INT | 4-बाइट हस्ताक्षरित पूर्णांक (-2,147,483,648 से 2,147,483,647) |
| बिगिनट | 8-बाइट हस्ताक्षरित पूर्णांक (-9,223,372,036,854,775,808 से 9,223,372,036,854,775,807) |
| फ्लोट | 4-बाइट एकल परिशुद्धता फ्लोटिंग पॉइंट संख्या |
| डबल | 8-बाइट डबल प्रेसिजन फ्लोटिंग पॉइंट संख्या |
| दशमलव | हम इस प्रकार में परिशुद्धता और पैमाने को DECIMAL(precision, scale) के रूप में परिभाषित कर सकते हैं। जब इन्हें छोड़ दिया जाता है तो Hive DECIMAL(10,0) का उपयोग करता है। |
हाइव स्ट्रिंग डेटा प्रकार
कैरेक्टर कॉलम तीन आकारों में आते हैं, और अंतर यह है कि क्या हाइव घोषित लंबाई को लागू करता है या नहीं।
| प्रकार | लंबाई |
|---|---|
| CHAR | निश्चित लंबाई, अधिकतम 255 अक्षर। छोटी लंबाई में रिक्त स्थान जोड़े जाते हैं। |
| VARCHAR | 1 से 65,535 अक्षर तक। इससे अधिक मान को स्वयं ही छोटा कर दिया जाता है। |
| STRING है | हम यहां लंबाई परिभाषित कर सकते हैं (कोई सीमा नहीं)। |
हाइव दिनांक/समय डेटा प्रकार
टेम्पोरल कॉलम बिना किसी टाइम-ज़ोन ऑफ़सेट के संग्रहीत किए जाते हैं, जिसे विभिन्न क्लस्टरों द्वारा लिखे गए मूल्यों की तुलना करने से पहले याद रखना महत्वपूर्ण है।
| प्रकार | प्रयोग |
|---|---|
| टाइमस्टैम्प | पारंपरिक का समर्थन करता है यूनिक्स वैकल्पिक नैनोसेकंड परिशुद्धता के साथ टाइमस्टैम्प |
| तारीख | यह YYYY-MM-DD प्रारूप में है। दिनांक प्रकार के लिए समर्थित मानों की सीमा 0000-01-01 से 9999-12-31 तक है, जो प्रिमिटिव द्वारा समर्थन पर निर्भर करती है। Java दिनांक प्रकार |
हाइव विविध डेटा प्रकार
दो अन्य मूलभूत तत्व संख्यात्मक, स्ट्रिंग और दिनांक परिवारों से बाहर स्थित हैं, लेकिन वास्तविक योजनाओं में नियमित रूप से दिखाई देते हैं।
| प्रकार | प्रयोग |
|---|---|
| बूलियन | सही या गलत को स्टोर करता है |
| बायनरी | यह बाइट्स का एक ऐरे स्टोर करता है, जिससे रॉ कंटेंट स्ट्रिंग कॉलम से बाहर रहता है। |
हाइव जटिल डेटा प्रकार
जटिल प्रकार के डेटा में मानों को एक ही कॉलम के अंदर समाहित किया जाता है, जिससे उस अतिरिक्त जॉइन की आवश्यकता समाप्त हो जाती है जिसकी आवश्यकता रिलेशनल डिज़ाइन को होती।
| प्रकार | प्रयोग |
|---|---|
| Arrays | सरणी नकारात्मक मान और गैर-स्थिर अभिव्यक्तियाँ स्वीकार्य नहीं हैं |
| मैप्स | मानचित्र नकारात्मक मान और गैर-स्थिर अभिव्यक्तियाँ स्वीकार्य नहीं हैं |
| संरचनाएँ | struct |
| संघ | यूनियनटाइप |
हाइव कॉम्प्लेक्स डेटा प्रकारों का उदाहरण
ऊपर दी गई तालिका घोषणा प्रपत्र दर्शाती है। नीचे दिया गया कथन तीन जटिल प्रकारों को एक ही तालिका में रखता है ताकि सीमांकक खंड और एक्सेस सिंटैक्स को एक साथ देखा जा सके।
CREATE TABLE employees ( name STRING, skills ARRAY<STRING>, deductions MAP<STRING, FLOAT>, address STRUCT<street:STRING, city:STRING, pin:INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
यहां तीन अलग-अलग विभाजकों की आवश्यकता है: एक स्तंभों के बीच, दूसरा किसी ऐरे या स्ट्रक्चर के आइटमों के बीच, और तीसरा मैप कुंजी और उसके मान के बीच। एक बार तालिका बन जाने के बाद, प्रत्येक जटिल स्तंभ को उसके अपने एक्सेससर के साथ पढ़ा जाता है।
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
नीचे दी गई तालिका में यह बताया गया है कि कौन सा एक्सेसरी किस प्रकार का है।
| प्रकार | किसी मान को कैसे पढ़ा जाता है |
|---|---|
| ARRAY | शून्य-आधारित सूचकांक, जैसे कि कौशल[0] |
| एमएपी | वर्ग कोष्ठक में कुंजी खोज, जैसे कि deductions['tax'] |
| struct | फ़ील्ड नाम पर डॉट का संकेत, जैसे कि address.city |
| यूनियनटाइप | इसका उपयोग बहुत कम होता है, क्योंकि इसके लिए क्वेरी सपोर्ट अभी तक अधूरा है। |
जटिल प्रकारों को नेस्टेड किया जा सकता है, इसलिए ARRAY > एक मान्य कॉलम घोषणा है। कॉलम लेआउट तय हो जाने के बाद, तालिकाओं का निर्माण ऊपर वर्णित कथनों के आधार पर किया जाता है। Hive में टेबल बनाएं, बदलें और हटाएं.
हाइव में डेटाबेस कैसे बनाएं और हटाएं
Hive में डेटाबेस एक ऐसा नेमस्पेस होता है जो टेबलों को समूहबद्ध करता है, इसलिए किसी भी टेबल पर काम शुरू करने से पहले यही पहला ऑब्जेक्ट होता है जिसे बनाना पड़ता है। Hive में डेटाबेस बनाने और हटाने के चरण नीचे दिए गए हैं।
चरण 1) हाइव में डेटाबेस बनाएं
Hive शेल में डेटाबेस बनाने के लिए, हमें नीचे दिए गए सिंटैक्स के अनुसार कमांड का उपयोग करना होगा:
सिंटेक्स:
Create database <DatabaseName>
उदाहरण: “guru99” नाम का डेटाबेस बनाएं
नीचे दिए गए स्क्रीनशॉट में क्रिएट स्टेटमेंट के बाद शो कमांड दिखाया गया है, जिसमें क्लस्टर पर मौजूद सभी डेटाबेस की सूची दी गई है।
ऊपर दिए गए स्क्रीनशॉट से हम दो काम कर रहे हैं:
- हाइव में डेटाबेस “guru99” बनाना
- “show” कमांड का उपयोग करके मौजूदा डेटाबेस प्रदर्शित करना
उसी स्क्रीन में, जब हम शो कमांड को निष्पादित करते हैं, तो अंत में "guru99" डेटाबेस प्रदर्शित होता है, जिसका अर्थ है कि "guru99" डेटाबेस सफलतापूर्वक बनाया गया है।
चरण 2) हाइव में डेटाबेस को हटाएँ
बूंद के लिएping Hive शेल में डेटाबेस को ड्रॉप करने के लिए, हमें नीचे दिए गए सिंटैक्स के अनुसार "ड्रॉप" कमांड का उपयोग करना होगा:
सिंटेक्स:
Drop database <DatabaseName>
उदाहरण: ड्रॉप डेटाबेस गुरु99
अगले स्क्रीनशॉट में, ड्रॉप स्टेटमेंट पहले चलता है, और उसके बाद आने वाला शो कमांड अब डेटाबेस को सूचीबद्ध नहीं करता है।
ऊपर दिए गए स्क्रीनशॉट में हम दो काम कर रहे हैं:
- हम ड्रॉप हैंping Hive से डेटाबेस 'guru99'
- “show” कमांड के साथ इसकी क्रॉस जाँच करें
इसी स्क्रीन में, शो कमांड से डेटाबेस की जाँच करने के बाद, डेटाबेस "guru99" हाइव में दिखाई नहीं देता है। इसलिए अब हम पुष्टि कर सकते हैं कि डेटाबेस "guru99" को हटा दिया गया है।
Hive डेटाबेस कमांड: USE, DESCRIBE, SHOW और ALTER DATABASE
ऊपर दिए गए दोनों कथनों में उनके सबसे संक्षिप्त रूप का उपयोग किया गया है। दस्तावेजीकृत वाक्य संरचना में वैकल्पिक खंड शामिल हैं जो यह निर्धारित करते हैं कि फ़ाइलें कहाँ रखी जाएंगी और यदि नाम पहले से ही लिया हुआ है तो क्या होगा।
CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];
पूरे कोड में DATABASE और SCHEMA कीवर्ड एक दूसरे के स्थान पर उपयोग किए जा सकते हैं, इसलिए CREATE SCHEMA और CREATE DATABASE दोनों कमांड एक ही कार्य करते हैं। शेष कमांड नेमस्पेस से संबंधित दैनिक कार्यों को पूरा करते हैं।
| आदेश | यह क्या करता है |
|---|---|
| डेटाबेस दिखाएँ; | मेटास्टोर में पंजीकृत सभी डेटाबेस की सूची दिखाता है |
| डेटाबेस_नाम का उपयोग करें; | वर्तमान डेटाबेस को इस प्रकार सेट करता है कि तालिका नामों को किसी उपसर्ग की आवश्यकता नहीं होती है। |
| डेटाबेस का वर्णन करें: database_name; | यह टिप्पणी, एचडीएफएस स्थान और स्वामी की जानकारी देता है। |
| डेटाबेस का वर्णन करें (विस्तारित डेटाबेस_नाम); | उस आउटपुट में DBPROPERTIES कुंजी-मान युग्म जोड़ता है |
| ALTER DATABASE database_name SET DBPROPERTIES (…); | मेटाडेटा गुणों को जोड़ता या बदलता है |
| ALTER DATABASE database_name SET OWNER USER user_name; | स्वामित्व को किसी अन्य उपयोगकर्ता या भूमिका को हस्तांतरित करता है |
| ALTER DATABASE database_name SET LOCATION hdfs_path; | इसके बाद बनाई जाने वाली तालिकाओं द्वारा उपयोग किए जाने वाले पथ को बदल देता है। |
दो डिफ़ॉल्ट सेटिंग्स याद रखने लायक हैं। LOCATION क्लॉज़ के बिना, फ़ाइलें वेयरहाउस डायरेक्टरी के अंतर्गत होती हैं, सामान्यतः /user/hive/warehouse/database_name.db, और IF EXISTS के बिना, किसी गुम नाम के विरुद्ध ड्रॉप करने पर त्रुटि उत्पन्न होती है, न कि वह चुपचाप पास हो जाती है। ये दोनों सेटिंग्स इसमें रखी जाती हैं। हाइव मेटास्टोर.
हाइव डेटा प्रकार रूपांतरण और सामान्य त्रुटियाँ
टाइप का उपयोग हमेशा घोषित रूप में ही नहीं किया जाता है। जब कोई जानकारी खोई नहीं जा सकती, तो Hive स्वचालित रूप से मान को विस्तारित करता है, और बाकी सब कुछ स्पष्ट रूपांतरण पर छोड़ देता है।
- अंतर्निहित विस्तार TINYINT से SMALLINT से INT से BIGINT से FLOAT से DOUBLE की श्रृंखला का अनुसरण करता है, और अंकों को धारण करने वाली STRING को DOUBLE में पदोन्नत किया जाता है।
- संकुचन अपने आप नहीं होता, इसलिए एक INT कॉलम को असाइन किए गए DOUBLE को लिखित रूपांतरण की आवश्यकता होती है।
- CAST लिखित रूपांतरण करता है, और जब मान परिवर्तित नहीं हो पाता है तो यह त्रुटि के बजाय NULL लौटाता है।
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
नीचे दी गई त्रुटियाँ उन अधिकांश आश्चर्यों का कारण बनती हैं जिनका सामना शुरुआती लोगों को अपने पहले स्कीमा में करना पड़ता है।
| लक्षण | कारण और समाधान |
|---|---|
| डेटाबेस में टेबल मौजूद रहने पर ड्रॉप प्रक्रिया विफल हो जाती है। | RESTRICT डिफ़ॉल्ट विकल्प है। इससे जुड़ी तालिकाओं को हटाने के लिए CASCADE जोड़ें। |
| एक लंबी डोरी छोटी होकर आती है | VARCHAR अपनी घोषित लंबाई से आगे चुपचाप डेटा को छोटा कर देता है। जब कोई सीमा निर्धारित करने की आवश्यकता न हो तो STRING का उपयोग करें। |
| रूपांतरण के बाद एक कॉलम NULL के रूप में पढ़ा जाता है | CAST मान को पार्स नहीं कर सका। टाइप को विस्तारित करने से पहले स्रोत डेटा की जाँच करें। |
| मुद्रा के मूल्यों में पैसे या सेंट की कमी हो जाती है। | बिना आर्गुमेंट के DECIMAL का मतलब है DECIMAL(10,0)। स्केल को स्पष्ट रूप से बताएँ। |
| दो एक जैसी दिखने वाली तारीखें कभी मेल नहीं खातीं। | एक स्ट्रिंग डेट और एक डेट कॉलम अलग-अलग प्रकार हैं। तुलना करने से पहले एक पक्ष को कास्ट करें। |
एक बार जब डेटा प्रकार सही ढंग से काम करने लगें, तो अगला चरण डेटा को लोड करना और उस पर क्वेरी करना है, जिसके बारे में आगे बताया गया है। Order By, Group By और के साथ Hive क्वेरी Cluster By.


