HiveカスタムUDF関数--一般的なツールクラス
28485 ワード
関数の登録:
カスタム関数をjarパッケージにしてhdfsをアップロード
$hive>create function formattime as 'com.air.udf.FormatTimeUDF' using jar 'hdfs://mycluster/user/centos/air-hive-1.0-SNAPSHOT.jar'
次の操作を行います.
$hive>select formattime(datatime,'yyyy/MM/dd') day from test where datatime>= getDaybegin() and datatime< getDaybegin(1) ;
カスタム関数:
1,long型のタイムスライスを指定した日付フォーマットにフォーマットする
2、今日の開始時間を取得します.
カスタム関数をjarパッケージにしてhdfsをアップロード
$hive>create function formattime as 'com.air.udf.FormatTimeUDF' using jar 'hdfs://mycluster/user/centos/air-hive-1.0-SNAPSHOT.jar'
次の操作を行います.
$hive>select formattime(datatime,'yyyy/MM/dd') day from test where datatime>= getDaybegin() and datatime< getDaybegin(1) ;
カスタム関数:
1,long型のタイムスライスを指定した日付フォーマットにフォーマットする
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* long
*/
@Description(name = "udf_formattime",
value = "formattime",
extended = "formattime() ;\r
"
+ " formattime(1234567,'yyyy/MM/01') \r
"
+ " formattime('1234567','yyyy/MM/dd')")
public class FormatTimeUDF extends UDF {
/**
* ,long
*/
public String evaluate(long ms,String fmt) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(fmt) ;
Date d = new Date();
d.setTime(ms);
return sdf.format(d) ;
}
/**
* ,string
*/
public String evaluate(String ms,String fmt) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(fmt) ;
Date d = new Date();
d.setTime(Long.parseLong(ms));
return sdf.format(d) ;
}
/**
* ,string
*/
public String evaluate(long ms ,String fmt , int week) throws ParseException {
Date d = new Date();
d.setTime(ms);
//
Date firstDay = DateUtil.getWeekBeginTime(d) ;
SimpleDateFormat sdf = new SimpleDateFormat(fmt) ;
return sdf.format(firstDay) ;
}
}
2、今日の開始時間を取得します.
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import java.text.SimpleDateFormat;
import java.util.Date;
@Description(name = "udf_getdaybegin",
value = "getdaybegin",
extended = "getdaybegin() ;\r
"
+ " getdaybegin(2) \r
"
+ " getdaybegin('2017/06/29 01:02:03') \r
"
+ " getdaybegin('2017/06/29 01:02:03',2) \r
"
+ " getdaybegin(date_obj) \r
"
+ " getdaybegin(date_obj,2)")
public class DayBeginUDF extends UDF{
/**
* ( )
*/
public long evaluate(){
return DateUtil.getDayBeginTime(new Date()).getTime();
}
public long evaluate(Date d){
return DateUtil.getDayBeginTime(d).getTime();
}
public long evaluate(int offset){
return DateUtil.getDayBeginTime(new Date(),offset).getTime();
}
public long evaluate(Date d,int offset){
return DateUtil.getDayBeginTime(d,offset).getTime();
}
public long evaluate(String dateStr) throws Exception{
SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date d = df.parse(dateStr);
return evaluate(d);
}
public long evaluate(String dateStr,int offset) throws Exception{
SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date d = df.parse(dateStr);
return evaluate(d,offset);
}
public long evaluate(String dateStr,String fmt) throws Exception{
SimpleDateFormat df = new SimpleDateFormat(fmt);
Date d = df.parse(dateStr);
return evaluate(d);
}
public long evaluate(String dateStr,int offset, String fmt) throws Exception{
SimpleDateFormat df = new SimpleDateFormat(fmt);
Date d = df.parse(dateStr);
return evaluate(d,offset);
}
}
工具类:
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateUtil { /** * date . */ public static Date getDayBeginTime(Date d) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd 00:00:00"); return sdf.parse(sdf.format(d)); } catch (Exception e) { e.printStackTrace(); } return null; } /** * date . */ public static Date getDayBeginTime(Date d,int offset) { try { Date date=getDayBeginTime(d); Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.DAY_OF_MONTH,offset); return c.getTime(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * date . */ public static Date getWeekBeginTime(Date d) { try { Date date=getDayBeginTime(d); Calendar c = Calendar.getInstance(); c.setTime(date); int i = c.get(Calendar.DAY_OF_WEEK); c.add(Calendar.DAY_OF_MONTH,-(i-1)); return c.getTime(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * date . */ public static Date getWeekEndTime(Date d) { try { Date date=getDayBeginTime(d); Calendar c = Calendar.getInstance(); c.setTime(date); int i = c.get(Calendar.DAY_OF_WEEK); c.add(Calendar.DAY_OF_MONTH,(8-i)); return c.getTime(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * date . */ public static Date getWeekEndTime(Date d,int offset) { try { Date date=getDayBeginTime(d); Calendar c = Calendar.getInstance(); c.setTime(date); int i = c.get(Calendar.DAY_OF_WEEK); c.add(Calendar.DAY_OF_MONTH,(8-i)); c.add(Calendar.DAY_OF_MONTH,offset*7); return c.getTime(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * date . */ public static Date getWeekBeginTime(Date d,int offset) { try { Date date=getDayBeginTime(d); Calendar c = Calendar.getInstance(); c.setTime(date); int i = c.get(Calendar.DAY_OF_WEEK); c.add(Calendar.DAY_OF_MONTH,-(i-1)); c.add(Calendar.DAY_OF_MONTH,offset*7); return c.getTime(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * date . */ public static Date getMonthBeginTime(Date d ) { try { Date date=getDayBeginTime(d); Calendar c = Calendar.getInstance(); c.setTime(date); int i = c.get(Calendar.DAY_OF_MONTH); c.add(Calendar.DAY_OF_MONTH,-(i-1)); return c.getTime(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * date . */ public static Date getMonthBeginTime(Date d,int offset) { try { Date date=getDayBeginTime(d); Calendar c = Calendar.getInstance(); c.setTime(date); int i = c.get(Calendar.DAY_OF_MONTH); c.add(Calendar.DAY_OF_MONTH,-(i-1)); c.add(Calendar.MONTH,offset); return c.getTime(); } catch (Exception e) { e.printStackTrace(); } return null; } }