Пользовательская функция UserDefinedFunction в Hive

Постановка задачи

Я создал ниже 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(); 
                } 
}

Поэтому всякий раз, когда я пытаюсь выполнить запрос, как показано ниже, добавляя банку в путь к классам и создавая временную функцию 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

И я всегда получаю нулевой результат, но в этой таблице есть данные за 5 августа.

Что я делаю не так? Любое предложение будет оценено.

Запрос должен быть таким, если сегодняшняя дата 6 августа, тогда запрос будет таким, как показано ниже, с использованием указанной выше пользовательской функции:

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

ПРИМЕЧАНИЕ. Поскольку я работаю с Hive 0.6, он не поддерживает замену переменных, поэтому я не могу использовать здесь hiveconf, а приведенная выше таблица была разделена на dt(date) column.


person arsenal    schedule 07.08.2012    source источник


Ответы (1)


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

person Habib Zare    schedule 07.08.2012
comment
Как это использует UDF? - person swdev; 12.12.2013