Hive में टेबल बनाना: आंतरिक टेबल बनाना, बदलना और हटाना (उदाहरण सहित)
⚡ स्मार्ट सारांश
बनाना, बदलना और छोड़नाping अपाचे हाइव में टेबल परिचित SQL-शैली के DDL का उपयोग करती हैं, लेकिन परिणाम इस बात पर निर्भर करता है कि टेबल आंतरिक है, जिसका स्वामित्व हाइव के पास है, या बाहरी है, जो केवल फ़ाइलों का वर्णन करती है।

टेबल संचालन जैसे कि निर्माण, परिवर्तन और विलोपनping इस वॉकथ्रू में हाइव में मौजूद टेबल्स को देखा जा सकता है। प्रत्येक ऑपरेशन को पहले लाइव सेशन के रूप में, फिर रियूजेबल स्टेटमेंट के रूप में दिखाया गया है।
Hive में टेबल कैसे बनाएं, बदलें और हटाएं
नीचे दिए गए स्क्रीनशॉट में, हम कॉलम के साथ एक तालिका बना रहे हैं और तालिका का नाम बदल रहे हैं।
- गुरु_सैंपल नाम की एक टेबल बनाएं जिसमें "empid" और "empname" जैसे दो कॉलम हों।
- गुरु99 डेटाबेस में मौजूद तालिकाओं को प्रदर्शित करना
- गुरु_सैंपल तालिकाओं के अंतर्गत प्रदर्शित हो रहा है
- “guru_sample” टेबल को “guru_sampleNew” के रूप में परिवर्तित किया जा रहा है।
- फिर से, जब आप "show" कमांड को निष्पादित करेंगे, तो यह नया नाम guru_sampleNew प्रदर्शित करेगा।
नीचे दिए गए सत्र में सभी पाँच चरणों को क्रम से चलाया गया है। छत्ता> प्रॉम्प्ट, और नाम बदलने से पहले और बाद में किए गए दो SHOW TABLES कॉल प्रभाव को दृश्यमान बनाते हैं।
बूंदping टेबल गुरु_सैंपलन्यू:
एक ही DROP TABLE स्टेटमेंट से नाम बदली गई टेबल हट जाती है, और Hive जवाब में OK लिख देता है।
Hive में CREATE TABLE का सिंटैक्स और सामान्य क्लॉज़
ऊपर दिए गए उदाहरण में सबसे संक्षिप्त रूप का उपयोग किया गया है। दस्तावेजी कथन कई वैकल्पिक खंडों को स्वीकार करता है, और प्रत्येक खंड कुछ ऐसा तय करता है जिसे उदाहरण डिफ़ॉल्ट रूप में छोड़ देता है।
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type, ...)] [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)];
| धारा | यह क्या नियंत्रित करता है? |
|---|---|
| बाहरी | यह एक बाहरी टेबल बनाता है, इसलिए DROP कमांड डेटा फ़ाइलों को यथास्थान छोड़ देता है। |
| अस्थायी | यह सत्र-आधारित तालिका बनाता है जो सत्र समाप्त होने पर गायब हो जाती है। |
| यदि मौजूद नहीं है | उस नाम की तालिका पहले से मौजूद होने पर त्रुटि को दबाता है |
| द्वारा विभाजित | तालिका को प्रत्येक कुंजी मान के लिए एक निर्देशिका में विभाजित करता है |
| … द्वारा n बकेट में समूहीकृत | पंक्तियों को निश्चित संख्या में फ़ाइलों में हैश करता है |
| पंक्ति प्रारूप / इस रूप में संग्रहीत | यह डिलिमिटर या SerDe और फ़ाइल फ़ॉर्मेट, जैसे कि TEXTFILE, ORC या Parquet, सेट करता है। |
| LOCATION | यह तालिका को वेयरहाउस डिफ़ॉल्ट के बजाय एक विशिष्ट HDFS पथ पर इंगित करता है। |
| टीबीएलप्रॉपर्टीज | यह मेटाडेटा कुंजी-मान युग्म संलग्न करता है, जिसमें external.table.purge भी शामिल है। |
एक संबंधित रूप, CREATE TABLE new_table LIKE existing_tableयह किसी भी पंक्ति की प्रतिलिपि बनाए बिना स्कीमा की प्रतिलिपि बनाता है। PARTITIONED BY और CLUSTERED BY जैसे संरचनात्मक खंडों को गाइड में विस्तार से समझाया गया है। हाइव विभाजन और बकेट.
तालिका के प्रकार और उसका उपयोग
टेबल की बात करें तो, यह बिल्कुल उसी तरह है जैसे हम पारंपरिक रिलेशनल डेटाबेस में टेबल बनाते हैं। फ़िल्टरिंग और जॉइन जैसी कार्यक्षमताओं को टेबल पर लागू किया जा सकता है।
Hive, स्कीमा के लोडिंग और डिज़ाइन के आधार पर, आंतरिक और बाह्य तालिकाओं नामक दो प्रकार की तालिका संरचनाओं से निपटता है। करंडयह चुनाव केवल दिखावटी नहीं है: यह तय करता है कि डेटा फ़ाइलों का मालिक कौन है और टेबल को हटाए जाने पर उनका क्या होता है।
हाइव में आंतरिक तालिकाएँ
- इंटरनल टेबल की प्रकृति टाइटली कपल्ड होती है। इस प्रकार की टेबल में, पहले टेबल बनानी होती है और फिर उसमें डेटा लोड करना होता है।
- हम इसे स्कीमा पर आधारित डेटा कह सकते हैं।
- बूंद-बूंद करकेping इस तालिका से डेटा और स्कीमा दोनों हटा दिए जाएंगे।
- इस तालिका का संग्रहीत स्थान /user/hive/warehouse होगा।
- आंतरिक तालिकाओं को प्रबंधित तालिकाएँ भी कहा जाता है, और केवल वे ही TRUNCATE, ARCHIVE, MERGE, CONCATENATE और ACID लेनदेन का समर्थन करती हैं।
आंतरिक टेबल कब चुनें?
- यदि प्रोसेसिंग डेटा स्थानीय फ़ाइल सिस्टम में उपलब्ध है
- यदि हम चाहते हैं कि हाइव विलोपन सहित डेटा के संपूर्ण जीवनचक्र का प्रबंधन करे
आंतरिक तालिका के लिए नमूना कोड स्निपेट
- आंतरिक तालिका बनाने के लिए
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- डेटा को आंतरिक तालिका में लोड करें
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- तालिका की सामग्री प्रदर्शित करें
Hive>select * from guruhive_internaltable;
- आंतरिक तालिका को हटाने के लिए
Hive>DROP TABLE guruhive_internaltable;
यदि आप guruhive_internaltable को हटाते हैं, तो उसका मेटाडेटा और डेटा सहित सब कुछ Hive से डिलीट हो जाएगा। जब तक PURGE निर्दिष्ट न किया जाए, फ़ाइलें तुरंत हटाने के बजाय HDFS ट्रैश फ़ोल्डर में चली जाती हैं।
निम्नलिखित स्क्रीनशॉट से, हम एक ही सत्र में चारों कथनों के आउटपुट को देख सकते हैं, जो सफल ड्रॉप के साथ समाप्त होता है।
उपरोक्त कोड और स्क्रीनशॉट से पता चलता है कि हम निम्नलिखित कार्य करते हैं:
- आंतरिक तालिका बनाएं
- डेटा को आंतरिक तालिका में लोड करें
- तालिका की सामग्री प्रदर्शित करें
- आंतरिक तालिका को हटाने के लिए
हाइव में बाह्य तालिकाएँ
- एक्सटर्नल टेबल का नेचर लूजली कपल्ड होता है। डेटा HDFS में उपलब्ध होगा। टेबल का निर्माण HDFS डेटा पर किया जाएगा।
- दूसरे शब्दों में, हम कह सकते हैं कि यह डेटा पर स्कीमा बना रहा है।
- ड्रॉप के समयping यह टेबल केवल स्कीमा को हटाता है, डेटा पहले की तरह ही एचडीएफएस में उपलब्ध रहेगा।
- बाह्य तालिकाएं, स्कीमा अद्यतन होने पर हर बार डेटा को हटाने के बजाय HDFS में संग्रहीत डेटा के लिए एकाधिक स्कीमा बनाने का विकल्प प्रदान करती हैं
- Hive 4.0.0 से, टेबल प्रॉपर्टी external.table.purge को true पर सेट करने से DROP कमांड डेटा को भी डिलीट कर देता है।
बाहरी टेबल कब चुनें?
- यदि प्रोसेसिंग डेटा HDFS में उपलब्ध है
- उपयोगी जब फ़ाइलें हाइव के बाहर उपयोग की जा रही हों
बाहरी तालिका के लिए नमूना कोड स्निपेट
- बाह्य तालिका बनाएँ
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- यदि हम टेबल बनाते समय स्थान निर्दिष्ट नहीं करते हैं, तो हम डेटा को मैन्युअल रूप से लोड कर सकते हैं।
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- तालिका की सामग्री प्रदर्शित करें
Hive>select * from guruhive_external;
- बाह्य तालिका को हटाने के लिए
Hive>DROP TABLE guruhive_external;
नीचे दिए गए स्क्रीनशॉट से हम आउटपुट देख सकते हैं। ध्यान दें कि अंत में ड्रॉप करने से केवल स्कीमा हटता है – LOCATION पाथ के अंतर्गत फ़ाइल अप्रभावित रहती है।
उपरोक्त कोड में, हम निम्नलिखित कार्य करते हैं।
- बाह्य तालिका बनाएँ
- डेटा को बाहरी तालिका में लोड करें
- तालिका की सामग्री प्रदर्शित करें
- बूंदping बाहरी तालिका
आंतरिक और बाह्य तालिकाओं के बीच अंतर
| Feature | आंतरिक | बाहरी |
|---|---|---|
| स्कीमा | स्कीमा पर डेटा | डेटा पर स्कीमा |
| भंडारण स्थान | /उपयोगकर्ता/हाइव/वेयरहाउस | LOCATION द्वारा दी गई HDFS लोकेशन |
| डेटा उपलब्धता | स्थानीय फ़ाइल सिस्टम के भीतर | एचडीएफएस के भीतर |
| ड्रॉप का प्रभाव | स्कीमा और डेटा हटाता है | यह केवल स्कीमा को हटाता है, जब तक कि external.table.purge true न हो। |
| ट्रंकेट समर्थन | समर्थित | समर्थित नहीं |
| ACID लेनदेन | समर्थित | समर्थित नहीं |
RSI अपाचे हाइव दस्तावेज़ीकरण यह नियम स्पष्ट रूप से बताता है: हाइव मानता है कि प्रबंधित तालिकाओं के डेटा पर उसका स्वामित्व है और बाहरी तालिकाओं के डेटा पर उसका स्वामित्व नहीं है, और उपरोक्त सभी अंतर इसी एक धारणा से उत्पन्न होते हैं।
ALTER TABLE और DROP TABLE कमांड का संदर्भ
ऊपर दिए गए स्क्रीनशॉट में केवल नाम बदलने और हटाने के विकल्प दिखाए गए हैं। ये वे विकल्प हैं जिनका उपयोग कोई पेशेवर मौजूदा टेबल पर सबसे अधिक करता है।
| कथन | उद्देश्य |
|---|---|
| ALTER TABLE table_name RENAME TO new_name; | टेबल का नाम बदलता है; प्रबंधित टेबल के मामले में, यह उसकी HDFS डायरेक्टरी को भी स्थानांतरित करता है। |
| ALTER TABLE table_name ADD COLUMNS (col_name data_type); | स्कीमा के अंत में एक या अधिक कॉलम जोड़ता है |
| ALTER TABLE table_name CHANGE COLUMN old_name new_name data_type; | किसी कॉलम का नाम बदलता है या उसका प्रकार बदलता है |
| ALTER TABLE table_name REPLACE COLUMNS (…); | यह पूरी कॉलम सूची को एक नई सूची से बदल देता है। |
| ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE'); | यह फ़ंक्शन प्रबंधित तालिका को बाहरी तालिका में परिवर्तित करता है, और FALSE इसे उलट देता है। |
| DROP TABLE [IF EXISTS] table_name [PURGE]; | टेबल को हटा देता है; PURGE ट्रैश फ़ोल्डर को छोड़ देता है, इसलिए डेटा को पुनर्प्राप्त नहीं किया जा सकता है। |
| टेबल_नाम को हटाएँ; | सभी पंक्तियों को हटा देता है लेकिन स्कीमा को बरकरार रखता है; केवल प्रबंधित तालिकाओं के लिए। |
किसी भी स्क्रिप्ट में दो सुरक्षा उपाय शामिल करना उपयोगी होता है। IF EXISTS यह सुनिश्चित करता है कि पहले से हटाई गई तालिका पर ड्रॉप प्रक्रिया विफल न हो, और DESCRIBE FORMATTED ड्रॉप प्रक्रिया चलने से पहले पुष्टि करता है कि लक्ष्य MANAGED_TABLE है या EXTERNAL_TABLE।




