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 に答える