hadoop - हाइव में, मैं एक कॉलम कैसे जोड़ सकता हूँ यदि वह कॉलम मौजूद नहीं है?




hive hdinsight (2)

आप आंशिक रूप से इसे hive.cli.errors.ignore फ्लैग सेट करके, चारों ओर काम कर सकते हैं। इस मामले में हाइवे सीएलआई आगे प्रश्नों के निष्पादन को मजबूर करेगी, भले ही रास्ते में प्रश्न विफल हो जाए।

इस उदाहरण में:

SET hive.cli.errors.ignore=true;
ALTER TABLE MyTable ADD COLUMNS (mycolumn string);
ALTER TABLE MyTable ADD COLUMNS (mycolumn string);
ALTER TABLE MyTable ADD COLUMNS (mycolumn2 string);

हाइव सभी प्रश्नों को निष्पादित करेगा, हालांकि दूसरी क्वेरी में कोई त्रुटि होगी।

मैं एक तालिका में एक नया कॉलम जोड़ना चाहूंगा, लेकिन तभी यदि वह कॉलम पहले से मौजूद न हो।

यह काम करता है यदि स्तंभ मौजूद नहीं है:

ALTER TABLE MyTable ADD COLUMNS (mycolumn string);

लेकिन जब मैं इसे दूसरी बार निष्पादित करता हूं, मुझे एक त्रुटि मिलती है

Column 'mycolumn' exists

जब मैं "IF NOT EXISTS" सिंटैक्स का उपयोग करने का प्रयास करता हूं जो कि तालिका बनाने और समर्थन के लिए समर्थित है, तो मुझे एक सिंटैक्स त्रुटि मिलती है:

ALTER TABLE MyTable ADD IF NOT EXISTS COLUMNS (mycolumn string);
FAILED: ParseException line 3:42 required (...)+ loop did not match anything at input 'COLUMNS' in add partition statement

मुझे जो कुछ चाहिए, वह कुछ है जो आइटम को पूरी तरह से निष्पादित कर सकता है इसलिए मैं अपनी क्वेरी चला सकता हूं कि यह स्तंभ मौजूद है या नहीं।


खैर ऐसा करने का कोई सीधा तरीका नहीं है मेरा मतलब है एक एकल प्रश्न के माध्यम से ऐसे दो अन्य तरीके हैं:

1.) जेडीबीसी का उपयोग करना:

1.1) Do describe on the table name.
1.2) You will get a list of columns in result set.
1.3) Check if your columns exists or not by iterating through the result set.

2.) हाइव मेटास्टोर क्लाइंट का उपयोग करना:

2.1) Create a object of HiveMetastoreClient
2.2) HiveMetastoreClient.getFields(<>db_name, <table_name>).get(index).getName() will give you the column name.
2.3) Check if your column exists of not by comparing the list.

आशा करता हूँ की ये काम करेगा...!!!





hdinsight