Hive自定义函数

hive自定义函数,这里我们举一个简单的小例子来进行学习。
下面是在eclipse中自定义的方法 TimeFormatUDF方法目的是为了,把log日志中时间格式为[29/April/2016:17:38:20 +0800] 改为yyyy-MM-dd HH:mm:ss。

//自定义函数需要继承UDF类,还需要添加 hive-exec 的依赖
public class TimeFormatUDF extends UDF {
    public static final SimpleDateFormat DATE_FORMAT = 
            new SimpleDateFormat("[dd/MMMMM/yyyy:HH:mm:ss Z]",Locale.ENGLISH);
    public static final SimpleDateFormat STAND_DATE_FORMAT = 
            new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //evaluate这个方法明需要和官方文档一致,否则程序会运行错误
    public String evaluate(String time) {
        try {
            Date oDate = DATE_FORMAT.parse(time);
            return STAND_DATE_FORMAT.format(oDate);
        } catch (Exception e) {
            return null;
        }

    }

    public String evaluate(String time, String type) {
        try {
            Date oDate = DATE_FORMAT.parse(time);

            if (type != null && type.equals("hour")) {
                SimpleDateFormat sdf = new SimpleDateFormat("HH");
                return sdf.format(oDate);
            } else if (type.equals("year")) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
                return sdf.format(oDate);
            } else if (type.equals("month")) {
                SimpleDateFormat sdf = new SimpleDateFormat("MM");
                return sdf.format(oDate);
            } else if (type.equals("day")) {
                SimpleDateFormat sdf = new SimpleDateFormat("dd");
                return sdf.format(oDate);
            } else {
                return null;
            }
        } catch (Exception e) {
            return null;
        }
    }

    public static void main(String[] args) {
        TimeFormatUDF test = new TimeFormatUDF();
        //把log日志中时间格式为[29/April/2016:17:38:20 +0800] 改为yyyy-MM-dd HH:mm:ss
        String evaluate = test.evaluate("[29/April/2016:17:38:20 +0800]");
        System.out.println(evaluate);
    }

}

我们需要把java代码打包成jar包上传到虚拟机上,

这是在hive中运行的hql语句。

--统计每个时段的pu和uv数量;
--如果程序代码出现错误,需要把上传的jar包删除,再重新添加
delete jar /usr/jar/timeformat.jar;
--添加打包为jar的应用程序
add jar /usr/jar/timeformat.jar;
--创建自定义函数
create function str_to_date as 'com.wahaha.hiveudf.TimeFormatUDF';
show functions;
--time为数据库表中的字段
select str_to_date(time,'hour') from apachelog;

好了,这样就ok了,这么简单的小例子,希望能成为你学习hive自定义函数的小起点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值