2017-01-24 3 views
0

В следующем коде HiveQL, я хочу, чтобы добавить раздел в существующую таблицу:получить UDF результаты в улье

-- my_table was defined and partitioned by `dt string`, which is date 
-- now I want to add partition 
alter table my_table add if not exists 
partition (dt=current_date()); #FAILED: ParseException line 1:72 extraneous input '(' expecting) near '<EOF>' 

alter table my_table add if not exists 
partition (dt=${current_date()}); # FAILED: ParseException line 1:60 cannot recognize input near '$' '{' 'current_date' in constant 

Однако приведенный выше код не будет работать, то почему? Любой другой способ сделать это?

+0

Какой версия ульи вы используете? Функция current_date доступна в версии улья 0.14. – marjun

ответ

1

Hive ожидать литералы в алтарной перегородке

NoViableAltException([email protected][215:1: constant : (Number | dateLiteral | timestampLiteral | StringLiteral | stringLiteralSequence | BigintLiteral | SmallintLiteral | TinyintLiteral | DecimalLiteral | charSetStringLiteral | booleanValue);]) 

Кроме того, CURRENT_DATE доступны только из улья 2.0, поэтому на основе вашей ошибки, вероятно, вы работаете с более низкой версией.

Обходным решением.

Написать файл со следующим утверждением

ALTER TABLE my_table add if not exists partition(dt= '${hiveconf:mytime}') 

и вызвать крапивницу, как (в Linux)

mydate=$(date +"%m-%d-%y") 
hive -S -hiveconf mytime=$mydate-f test.hql 

Я надеюсь, что поможет.

PS: Я хотел бы попробовать альтер команду с CURRENT_DATE в улье 2.0, в любом случае вы должны использовать его как CURRENT_DATE вместо CURRENT_DATE()

Смежные вопросы