Hive में टेबल बनाना: आंतरिक टेबल बनाना, बदलना और हटाना (उदाहरण सहित)

⚡ स्मार्ट सारांश

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

  • 🧱 तालिका बनाएं: एक स्टेटमेंट हाइव टेबल के कॉलम, रो फॉर्मेट और, वैकल्पिक रूप से, स्टोरेज लोकेशन को परिभाषित करता है।
  • तालिका में परिवर्तन: RENAME कमांड टेबल का नाम बदलता है, और ADD COLUMNS या CHANGE COLUMN कमांड डेटा को रीलोड किए बिना स्कीमा को एडिट करते हैं।
  • ड्रॉप तालिका: बूंदping एक इंटरनल टेबल स्कीमा और डेटा दोनों को डिलीट कर देती है, जबकि ड्रॉप कमांड ऐसा नहीं करता।ping एक बाह्य तालिका केवल मेटाडेटा को हटाती है।
  • 🔒 आंतरिक स्वामित्व: एक आंतरिक या प्रबंधित तालिका वेयरहाउस डायरेक्टरी के अंतर्गत रहती है और हाइव इसके संपूर्ण जीवनचक्र को नियंत्रित करता है।
  • 🔗 बाह्य का संदर्भ दिया गया है: एक बाहरी टेबल उन फाइलों की ओर इशारा करती है जिन्हें अन्य उपकरण भी पढ़ते हैं, इसलिए वे फाइलें ड्रॉप होने के बाद भी सुरक्षित रहती हैं।
  • 🔎 प्रकार सत्यापित करें: DESCRIBE FORMATTED reports MANAGED_TABLE or EXTERNAL_TABLE, जिससे ड्रॉप करने से पहले किसी भी प्रकार की अनिश्चितता दूर हो जाती है।

उदाहरणों सहित Hive में टेबल बनाने, बदलने और हटाने के कमांड

टेबल संचालन जैसे कि निर्माण, परिवर्तन और विलोपनping इस वॉकथ्रू में हाइव में मौजूद टेबल्स को देखा जा सकता है। प्रत्येक ऑपरेशन को पहले लाइव सेशन के रूप में, फिर रियूजेबल स्टेटमेंट के रूप में दिखाया गया है।

Hive में टेबल कैसे बनाएं, बदलें और हटाएं

नीचे दिए गए स्क्रीनशॉट में, हम कॉलम के साथ एक तालिका बना रहे हैं और तालिका का नाम बदल रहे हैं।

  1. गुरु_सैंपल नाम की एक टेबल बनाएं जिसमें "empid" और "empname" जैसे दो कॉलम हों।
  2. गुरु99 डेटाबेस में मौजूद तालिकाओं को प्रदर्शित करना
  3. गुरु_सैंपल तालिकाओं के अंतर्गत प्रदर्शित हो रहा है
  4. “guru_sample” टेबल को “guru_sampleNew” के रूप में परिवर्तित किया जा रहा है।
  5. फिर से, जब आप "show" कमांड को निष्पादित करेंगे, तो यह नया नाम guru_sampleNew प्रदर्शित करेगा।

नीचे दिए गए सत्र में सभी पाँच चरणों को क्रम से चलाया गया है। छत्ता> प्रॉम्प्ट, और नाम बदलने से पहले और बाद में किए गए दो SHOW TABLES कॉल प्रभाव को दृश्यमान बनाते हैं।

Hive सेशन guru_sample नाम से एक फ़ाइल बना रहा है और उसका नाम बदलकर guru_sampleNew कर रहा है।

बूंदping टेबल गुरु_सैंपलन्यू:

एक ही DROP TABLE स्टेटमेंट से नाम बदली गई टेबल हट जाती है, और Hive जवाब में OK लिख देता है।

छत्ते का खोल गिरनाping गुरु_सैंपलन्यू टेबल में 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 लेनदेन का समर्थन करती हैं।

आंतरिक टेबल कब चुनें?

  • यदि प्रोसेसिंग डेटा स्थानीय फ़ाइल सिस्टम में उपलब्ध है
  • यदि हम चाहते हैं कि हाइव विलोपन सहित डेटा के संपूर्ण जीवनचक्र का प्रबंधन करे

आंतरिक तालिका के लिए नमूना कोड स्निपेट

  1. आंतरिक तालिका बनाने के लिए
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. डेटा को आंतरिक तालिका में लोड करें
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. तालिका की सामग्री प्रदर्शित करें
        Hive>select * from guruhive_internaltable;
  4. आंतरिक तालिका को हटाने के लिए
        Hive>DROP TABLE guruhive_internaltable;

यदि आप guruhive_internaltable को हटाते हैं, तो उसका मेटाडेटा और डेटा सहित सब कुछ Hive से डिलीट हो जाएगा। जब तक PURGE निर्दिष्ट न किया जाए, फ़ाइलें तुरंत हटाने के बजाय HDFS ट्रैश फ़ोल्डर में चली जाती हैं।

निम्नलिखित स्क्रीनशॉट से, हम एक ही सत्र में चारों कथनों के आउटपुट को देख सकते हैं, जो सफल ड्रॉप के साथ समाप्त होता है।

Hive सेशन बनाना, लोड करना, क्वेरी करना और हटानाping गुरुहाइव_आंतरिकता तालिका

उपरोक्त कोड और स्क्रीनशॉट से पता चलता है कि हम निम्नलिखित कार्य करते हैं:

  • आंतरिक तालिका बनाएं
  • डेटा को आंतरिक तालिका में लोड करें
  • तालिका की सामग्री प्रदर्शित करें
  • आंतरिक तालिका को हटाने के लिए

हाइव में बाह्य तालिकाएँ

  • एक्सटर्नल टेबल का नेचर लूजली कपल्ड होता है। डेटा HDFS में उपलब्ध होगा। टेबल का निर्माण HDFS डेटा पर किया जाएगा।
  • दूसरे शब्दों में, हम कह सकते हैं कि यह डेटा पर स्कीमा बना रहा है।
  • ड्रॉप के समयping यह टेबल केवल स्कीमा को हटाता है, डेटा पहले की तरह ही एचडीएफएस में उपलब्ध रहेगा।
  • बाह्य तालिकाएं, स्कीमा अद्यतन होने पर हर बार डेटा को हटाने के बजाय HDFS में संग्रहीत डेटा के लिए एकाधिक स्कीमा बनाने का विकल्प प्रदान करती हैं
  • Hive 4.0.0 से, टेबल प्रॉपर्टी external.table.purge को true पर सेट करने से DROP कमांड डेटा को भी डिलीट कर देता है।

बाहरी टेबल कब चुनें?

  • यदि प्रोसेसिंग डेटा HDFS में उपलब्ध है
  • उपयोगी जब फ़ाइलें हाइव के बाहर उपयोग की जा रही हों

बाहरी तालिका के लिए नमूना कोड स्निपेट

  1. बाह्य तालिका बनाएँ
    Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING)
    	 Row format delimited
    	 Fields terminated by '\t'
    	 LOCATION '/user/guru99hive/guruhive_external';
  2. यदि हम टेबल बनाते समय स्थान निर्दिष्ट नहीं करते हैं, तो हम डेटा को मैन्युअल रूप से लोड कर सकते हैं।
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
  3. तालिका की सामग्री प्रदर्शित करें
      Hive>select * from guruhive_external;
  4. बाह्य तालिका को हटाने के लिए
      Hive>DROP TABLE guruhive_external;

नीचे दिए गए स्क्रीनशॉट से हम आउटपुट देख सकते हैं। ध्यान दें कि अंत में ड्रॉप करने से केवल स्कीमा हटता है – LOCATION पाथ के अंतर्गत फ़ाइल अप्रभावित रहती है।

Hive सेशन बनाना, लोड करना, क्वेरी करना और हटानाping गुरुहाइव_बाहरी

उपरोक्त कोड में, हम निम्नलिखित कार्य करते हैं।

  • बाह्य तालिका बनाएँ
  • डेटा को बाहरी तालिका में लोड करें
  • तालिका की सामग्री प्रदर्शित करें
  • बूंद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।

अक्सर पूछे जाने वाले प्रश्न

DESCRIBE FORMATTED table_name कमांड चलाएँ। टेबल टाइप पंक्ति MANAGED_TABLE या EXTERNAL_TABLE में से कोई एक विकल्प दिखाती है। डेटा हटाने से पहले जाँच करना अन्य जॉब्स द्वारा पढ़े जा रहे डेटा को हटाने से बचने का सबसे सस्ता तरीका है।

जी हाँ। ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE') मेटास्टोर में डेटा प्रकार को उलट देता है, और FALSE इसे वापस सामान्य स्थिति में ले आता है। डेटा फ़ाइलें अपनी जगह पर ही रहती हैं, इसलिए उन्हें पुनः लोड करने की आवश्यकता नहीं है।

सामान्यतः नहीं, केवल मेटास्टोर प्रविष्टि ही हटाई जाती है। हालाँकि, Hive 4.0.0 से, यदि किसी बाहरी तालिका में external.table.purge प्रॉपर्टी true पर सेट है, तो DROP कमांड द्वारा उसका डेटा भी हटा दिया जाता है, इसलिए पहले प्रॉपर्टीज़ की जाँच कर लें।

अब एक साधारण CREATE TABLE कमांड डिफ़ॉल्ट रूप से एक साधारण टेक्स्ट टेबल के बजाय एक प्रबंधित, ट्रांज़ैक्शनल ORC टेबल बनाती है। EXTERNAL कीवर्ड जोड़ने से Hive 3 क्लस्टर पर पुराना, नॉन-ACID व्यवहार बरकरार रहता है।

TRUNCATE कमांड सभी पंक्तियों को हटा देता है लेकिन स्कीमा को बरकरार रखता है, और यह केवल प्रबंधित तालिकाओं पर काम करता है। DROP कमांड भी स्कीमा को हटा देता है। TRUNCATE तब अधिक सुरक्षित विकल्प है जब तालिका परिभाषा को पुनः लोड होने पर भी बरकरार रखना हो।

नहीं। Hive मेटास्टोर में पहचानकर्ताओं को लोअरकेस में बदल देता है, इसलिए GURU_SAMPLE और guru_sample एक ही टेबल को संदर्भित करते हैं। डेटा के अंदर स्ट्रिंग मान केस-सेंसिटिव रहते हैं, यही कारण है कि WHERE तुलना में पंक्तियाँ छूट सकती हैं।

जी हां। कैटलॉग टूल्स में मशीन लर्निंग फीचर्स कॉलम की संख्या, नल रेट और क्वेरी पैटर्न का विश्लेषण करते हैं, फिर डेटा टाइप, फ़ाइल फॉर्मेट और पार्टीशन कीज़ का सुझाव देते हैं। आउटपुट को ड्राफ्ट के रूप में मानें, क्योंकि मॉडल नियोजित वर्कलोड को नहीं देख सकता।

कोपायलट एक संक्षिप्त टिप्पणी से CREATE, ALTER और DROP स्टेटमेंट को पूरा करता है, और एजेंटिक असिस्टेंट एक संपूर्ण माइग्रेशन स्क्रिप्ट तैयार कर सकते हैं। RevEXTERNAL कीवर्ड और किसी भी PURGE विकल्प को ध्यान से देखें, क्योंकि वहां गलत अनुमान लगाने से वास्तविक डेटा डिलीट हो सकता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: