在以下HiveQL代码中,我想将分区添加到现有表中:
-- 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 :(得分:1)
Hive期望alter partition
中的文字NoViableAltException(26@[215:1: constant : ( Number | dateLiteral | timestampLiteral | StringLiteral | stringLiteralSequence | BigintLiteral | SmallintLiteral | TinyintLiteral | DecimalLiteral | charSetStringLiteral | booleanValue );])
此外,CURRENT_DATE仅适用于Hive 2.0,因此根据您的错误,您可能正在使用较低版本。
解决方法。
使用以下语句编写文件
ALTER TABLE my_table add if not exists partition(dt= '${hiveconf:mytime}')
并调用hive(在linux中)
mydate=$(date +"%m-%d-%y")
hive -S -hiveconf mytime=$mydate-f test.hql
我希望有所帮助。
PS:我想在Hive 2.0中尝试使用CURRENT_DATE的alter命令,无论如何你应该像CURRENT_DATE一样使用它而不是CURRENT_DATE()