Java 配置单元中的自定义UserDefinedFunction

Java 配置单元中的自定义UserDefinedFunction,java,hadoop,mapreduce,hive,hiveql,Java,Hadoop,Mapreduce,Hive,Hiveql,问题陈述 我创建了下面的UserDefinedFunction以获得我想要的格式的昨天的日期,因为我将从查询中将格式传递到下面的方法中 public final class YesterdayDate extends UDF { public String evaluate(final String format) { DateFormat dateFormat = new SimpleDateFormat(format);

问题陈述

我创建了下面的
UserDefinedFunction
以获得我想要的格式的
昨天的日期
,因为我将从查询中将格式传递到下面的方法中

public final class YesterdayDate extends UDF {

         public String evaluate(final String format) { 
                 DateFormat dateFormat = new SimpleDateFormat(format); 
                 Calendar cal = Calendar.getInstance();
                 cal.add(Calendar.DATE, -1);     
                 return dateFormat.format(cal.getTime()).toString(); 
                } 
}
因此,每当我尝试运行下面这样的查询,将jar添加到类路径并创建临时函数
yesterdaydate
,我总是得到零结果-

hive> create temporary function yesterdaydate as 'com.example.hive.udf.YesterdayDate';
OK
Time taken: 0.512 seconds
下面是我正在运行的查询-

hive> SELECT * FROM REALTIME where dt= yesterdaydate('yyyyMMdd') LIMIT 10;
OK
我得到的结果总是零,但是数据在8月5日的表格里

我做错了什么?如有任何建议,将不胜感激

如果今天的日期是8月6日,查询应该是这样的-那么通过使用上面的用户定义函数,查询将如下所示-

SELECT * FROM REALTIME where dt= '20120805' LIMIT 10;

注意:-因为我使用的是
hive0.6
,所以它不支持变量替换,所以我不能在这里使用
hiveconf
,上面的表已经在
dt(date)列上进行了分区
从UNIXTIME(UNIX_TIMESTAMP()-1*24*60*60,%Y%m%d')

这是如何使用UDF的?