在Hive中检索udf结果

时间:2017-01-24 10:26:47

标签: hadoop hive hiveql

在以下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

但是,上面的代码不起作用,为什么?还有其他办法吗?

1 个答案:

答案 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()