Teradata 用に既に作成されたクエリをHiveで実装しようとしていますが、これweekofyear()
までTD_WEEK_OF_CALENDAR
は、最初の部分的な週は0です。
このメソッドに関連する定義済みの UDF が Hive に他に見つかりませんでした。Java でカスタム UDF を作成する場合でも、 の正確なロジックを取得できませんでしたTD_WEEK_OF_CALENDAR
。
誰かがこれについて助けてくれますか?
これは Joda 時間関数を使用して実現できます。ただし、Hive は Joda time Jar をサポートしていないため、joda-time jar を hive lib フォルダーに明示的に追加する必要があります。
関数 TD_WEEK_OF_CALENDAR は日曜日を週の最初の日として、土曜日を最後として扱いますが、joda-time 関数 getDayOfWeek() は日曜日を週の最後の日として扱い、その番号を 7 として日曜日を同じ週に引き込みます。
この以下のコードは必要に応じて
public Text evaluate(Text input) {
if(null != input){
String date = input.toString();
StringTokenizer st = new StringTokenizer(date, "-");
int year = Integer.parseInt(st.nextToken());
int month = Integer.parseInt(st.nextToken());
int day = Integer.parseInt(st.nextToken());
DateTime dateTime1 = new DateTime(1900, 1, 1, 0, 0, 0, 0);
DateTime dateTime2 = new DateTime(year, month, day, 0, 0, 0, 0);
int weeksDiff = dateTime2.getDayOfWeek() == 7 ? Weeks.weeksBetween(
dateTime1, dateTime2).getWeeks() + 1 : Weeks.weeksBetween(
dateTime1, dateTime2).getWeeks();
String weeks = weeksDiff + "";
return new Text(weeks);
} else {
return null;
}