2014-10-10 7 views
6

निम्नलिखित के साथ एक हाइव मेज पर एक विभाजन बनाने के लिए प्रयास कर रहा है:SemanticException जोड़ने partiton हाइव तालिका

> alter table stock_ticker add if not exists 
> partition(stock_symbol='ASP') 
> location 'data/stock_ticker_sample/stock_symbol=ASP/' 

निम्नलिखित में से कौन उत्पादन का उत्पादन

FAILED : SemanticException table is not partitioned but partition spec exists: {stock_symbol=ASP} 

इस तालिका पर कोई विभाजन इस से पहले कर रहे हैं अतिरिक्त प्रयास

> show partitions stock_ticker; 

जिसके परिणामस्वरूप

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. 
Table stock_ticker_sample is not a partitioned table 

कि STOCK_SYMBOL स्तंभ मौजूद है और प्रकार स्ट्रिंग की है सवाल ही पैदा नहीं होता है।

प्रश्न यह है कि इस विभाजन को जोड़ने के लिए क्या कदम उठाने की आवश्यकता है?

उत्तर

5

समाधान STOCK_TICKER तालिका की परिभाषा में विभाजन की जानकारी जोड़ने के लिए होगा:

> alter table stock_ticker add if not exists 
> partition(stock_symbol='ASP') 
> location 'data/stock_ticker_sample/stock_symbol=ASP/' 

जीएल:

CREATE EXTERNAL TABLE stock_ticker (
... 
) 
PARTITIONED BY (stock_symbol STRING); 

तो आसानी से आप बाह्य डेटा को अपनी तालिका में से जोड़ सकते हैं!

+0

ऐसा प्रतीत होता है कि विभाजन बाहरी तालिकाओं पर किया जाना चाहिए। – eddyoc

+0

नहीं, मुझे लगता है कि आप इस विभाजन के लिए मौजूदा स्थान निर्दिष्ट करना चाहते हैं ताकि इसे प्रबंधित करने योग्य तालिका ड्रॉप के मामले में स्रोत डेटा को खतरे में डाल सके। – www

+0

मेरा मतलब यह है कि जब मेरी आंतरिक तालिका के स्थान पर इंगित बाहरी तालिका पर प्रदर्शन किया जाता है तो विभाजन ऑपरेशन सफल होता है। ऐसा नहीं है कि आंतरिक तालिकाओं पर विभाजन संभव नहीं है। – eddyoc