问题陈述
我创建了下面的UserDefinedFunction
,以获得我想要的格式的yesterday's date
,因为我将从查询中将格式传递到下面的方法中。
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;
注意:-因为我使用的是Hive 0.6
,所以它不支持变量替换,所以我不能在这里使用hiveconf
,并且上表已经在dt(date) column
上进行了分区。
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP()-1*24*60*60,'%Y%m%d');