our project use hive 0.10 , and in the hiveql , we need use addMonths function builtin in hive-0.11.

so I write this udf and test.

java code:

package myudf;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date; import org.apache.hadoop.hive.ql.exec.UDF; public class addMonths extends UDF {
final Calendar calendar = Calendar.getInstance(); // String Year_month int numMonths
// return date add
public String evaluate(String _date, int numMonths) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
addMonth(sdf.parse(_date), numMonths);
int month = calendar.get(Calendar.MONTH) + 1;
String strmonth = String.valueOf(month > 9 ? month : "0" + month);
String strYearMon = calendar.get(Calendar.YEAR) + strmonth;
return strYearMon;
} Calendar addMonth(Date d, int numMonths) {
calendar.setTime(d);
boolean lastDatOfMonth = isLastDayOfMonth(calendar);
calendar.add(Calendar.MONTH, numMonths);
if (lastDatOfMonth) {
int maxDd = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, maxDd);
}
return calendar;
} boolean isLastDayOfMonth(Calendar cal) {
int maxDd = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
int dd = cal.get(Calendar.DAY_OF_MONTH);
return dd == maxDd;
} }
cd workspace and project folder. then 
jar cvf myudf.jar ./
move to proper folder: mv myudf.jar /home/hadoop/jar/myudf.jar

add jar /home/hadoop/jar/myudf.jar;
create temporary function addMonths as "myudf.addMonths";
select addMonths('2012-03-03',2) as newdate, addMonths('2012-03-03',-2) as newdate2  from nums where num<2;

 
 

最新文章

  1. 前端学HTTP之URL
  2. 使用JDBC调用存储过程
  3. VIM常用设置
  4. 串口 COM口 TTL RS-232 RS-485 区别 释疑
  5. win8.1下golang+sdl2.0环境搭建
  6. Linux 网络编程(IO模型)
  7. 中等难度SQL语句(存储过程,分页,拼接字段、游标,日期类型转换,动态行转列,视图)汇总
  8. SAP FI/CO凭证不一致的解决办法
  9. 下载abap 源代码
  10. python通过163邮箱发送邮件
  11. Axis2学习的第一天
  12. zoj 3820 Building Fire Stations 树的中心
  13. 协议(porotocol)
  14. XML参数转换为Object,并转换为List或DataTable
  15. &lt;转&gt;java编译问题:使用了未经检查或不安全的操作
  16. SVN 无法连接主机:由于目标计算机积极拒绝,无法连接
  17. Python中的@符号
  18. liunx基础知识
  19. 对nginx进行平滑升级
  20. 读书笔记_Effective_C++_条款三十三:避免遮掩继承而来的名称

热门文章

  1. [PHP] 自定义错误处理
  2. php面试题之一——PHP核心技术(高级部分)
  3. Spring InitializingBean和init-method
  4. 推荐几个的chorme的扩展程序
  5. 一个Chrome拓展——HttpPost
  6. DevExpress GridControl使用方法总结
  7. android ImageSwitcher
  8. Android 五大布局
  9. C标准库&lt;string.h&gt;实现
  10. 个人开源作品,即时通讯App支持文本、语音、图片聊天