配置单元中的自定义UserDefinedFunction



问题陈述

我创建了下面的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');

相关内容

  • 没有找到相关文章