2014-10-10 21 views
6

Próbuję utworzyć partycję na stole Hive z następujących czynności:SemanticException dodanie partiton Hive stół

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

która produkuje następujące dane wyjściowe

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

Brak partycji na tym stole przed tym próba dodania:

> show partitions stock_ticker; 

co daje w wyniku

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

Nie ma wątpliwości, że kolumna Stock_symbol istnieje i jest typu ciąg.

Pytanie, jakie kroki należy podjąć, aby dodać tę partycję?

Odpowiedz

5

rozwiązaniem byłoby dodać partycjonowanie informacji w definicji tabeli stock_ticker:

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

Wtedy łatwo można dodać zewnętrzne dane do tabeli przez:

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

GL!

+0

Wygląda na to, że partycjonowanie musi być wykonane na zewnętrznych tablicach. – eddyoc

+0

Nie, założyłem, że chciałeś określić istniejącą lokalizację dla tej partycji, dzięki czemu zarządzanie nią może zagrozić źródłowym danym w przypadku upuszczenia. – www

+0

Mam na myśli to, że po wykonaniu na zewnętrznej tabeli wskazującej położenie mojej wewnętrznej tabeli, że operacja partycji powiedzie się. Nie, że partycjonowanie na wewnętrznych tablicach nie jest możliwe per se. – eddyoc