問題文
クエリからこの以下のメソッドに形式を渡すため、必要な形式で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
ます。