Постановка задачи
Я создал ниже 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
.