我正在尝试实现一个已经在hive中为teradata编写并正在使用的查询 weekofyear() 直到现在作为替代品 TD_WEEK_OF_CALENDAR 方法,该方法返回一个整数值,该整数值表示自1900年1月1日(含)起的整周数,其中第一个部分周为0。我在配置单元中找不到与此方法相关的任何其他预定义自定义项。即使是用java编写自定义udf,我也无法获得 TD_WEEK_OF_CALENDAR .有人能帮忙吗?
weekofyear()
TD_WEEK_OF_CALENDAR
sg2wtvxw1#
这可以通过使用joda时间函数来实现。但是hive不支持joda时间jar,您需要显式地将joda时间jar添加到hive lib文件夹中。函数td\u week\u of \u 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; }
1条答案
按热度按时间sg2wtvxw1#
这可以通过使用joda时间函数来实现。但是hive不支持joda时间jar,您需要显式地将joda时间jar添加到hive lib文件夹中。
函数td\u week\u of \u calendar将星期日视为一周的第一天,星期六视为最后一天,而joda time函数getdayofweek()将星期日视为一周的最后一天,给出的数字为7,将星期日拉入同一周。
下面的代码将满足需要