使用UDF实现日期倒推30天,比如说当前日期为20170504,需要得到倒推30天的日期为20170404,格式为yyyyMMdd
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; /** * 日期倒推且设置格式 * */ public final class UDFDateSubFormat extends UDF { private SimpleDateFormat dateFormat = new SimpleDateFormat(); public Text evaluate(final Text s,final Integer days,final String format){ dateFormat.applyPattern(format); if(s == null){ return null; } try{ Date startDate = dateFormat.parse(s.toString()); Calendar calendar = Calendar.getInstance(); calendar.setTime(startDate); calendar.add(Calendar.DATE, days); return new Text(dateFormat.format(calendar.getTime())); }catch(Exception e){ e.printStackTrace(); return s; } } }
从eclipse中打包成JAR包:HiveCustomFunction.jar,并上传到安装Hive的机器上。
hive> add jar /data0/soft/hive2.1.1/custom_lib/HiveCustomFunction.jar; hive> create temporary function date_sub_format as 'com.paic.hive.function.UDFDateSubFormat';
hive> select date_sub_format('20170504',-30,'yyyyMMdd'); OK 20170404 Time taken: 0.156 seconds, Fetched: 1 row(s)