0

问题陈述

我创建了以下内容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.

4

1 回答 1

2

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP()-1*24*60*60,'%Y%m%d');

于 2012-08-07T03:38:31.607 回答