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的?