Hive UDF函数开发及企业规范

开发步骤

UDF简称自定义函数,它是Hive函数库的扩展,自定义函数UDF在MapReduce执行阶段发挥作用。开发步骤如下:

1)  给hive.ql.exec.UDF包开发一个自定义函数类,从UDF继承。自定义函数类实现evaluate方法。

2)  在FunctionRegistry类中注册开发的自定义函数类。

3)  打包发布至Hive客户端。

1.1开发工具

Eclipse是一款开源的、基于Java的可扩展开发平台。Hadoop开发人员可通过在Eclipse上面开发UDF。


1.2 UDF函数案例

1)开发UDF函数类

文件名及路径:/hive-0.12.0/src/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFHelloWorld.java

package org.apache.hadoop.hive.ql.udf;import org.apache.hadoop.hive.ql.exec.UDF;import org.apache.hadoop.io.Text;public class UDFHelloWorld extends UDF {public String evaluate(String str) {if (str == null) {return null;}return "HelloWorld " + str;}public static void main(String[] args) {helloUDF uf = new helloUDF();//Text t = new Text("gfsg");System.out.println(uf.evaluate("nihao").toString());}}

2)UDF类注册,注册方法

文件名及路径:/hive-0.12.0/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java

package org.apache.hadoop.hive.ql.exec;import org.apache.hadoop.hive.ql.udf.UDFHelloWorld;/*** FunctionRegistry.*/public final class FunctionRegistry {static {registerGenericUDF("concat", GenericUDFConcat.class);registerUDF("substr", UDFSubstr.class, false);registerUDF("substring", UDFSubstr.class, false);registerUDF("space", UDFSpace.class, false);registerUDF("repeat", UDFRepeat.class, false);registerUDF("ascii", UDFAscii.class, false);registerUDF("lpad", UDFLpad.class, false);registerUDF("rpad", UDFRpad.class, false);registerUDF("Hello", UDFHelloWorld.class, false);registerGenericUDF("size", GenericUDFSize.class);…………………………………………………………………………………………………………

3)Jar包发布路径

发布路径:/opt/boh/hive/lib/hive-exec-0.12.0-cdh5.0.0.jar

上传至hadoop集群执行脚本的hive客户端。

1.3Hive UDF函数
1.3.1UDF函数列表

函数清单及其功能

TO_DATE(string date,'format')

格式化所需要的日期

ADD_MONTHS(Timestamp date,int n)

增加月数

date_tostring(Timestamp date,'format')

转换Date类型为指定格式字符串

MONTHS_BETWEEN(Timestamp date1,Timestamp date2)

返回两个日期之间的月数

f_age(string identityId)

验证身份证合法性并返回性别年龄

f_checkidcard(string identityId)

验证身份证合法性

1.3.2UDF函数说明

Ø  TO_DATE函数

Select  to_date('20140909111111','YYYYMMDDHH24miss') from test;

返回结果:2014-09-09 11:11:11

Ø  ADD_MONTHS函数

select add_months(to_date('20140909111111','YYYYMMDDHH24miss'),1) from test;

返回结果:2014-10-09 11:11:11

Ø  date_tostring函数

select date_tostring(to_date('20140909111111','YYYYMMDDHH24miss'),'YYYY-MM-DD') from test;

返回结果:2014-09-09

Ø  MONTHS_BETWEEN函数

select MONTHS_BETWEEN(to_date('20140909111111','YYYYMMDDHH24miss'),to_date('20140706111111','YYYYMMDDHH24miss')) from test;

返回结果:2.096774193548387

Ø  f_age函数

select f_age('511024198710148199') from test;

返回结果:127

Ø  f_checkidcard函数

select f_checkidcard('511024198710148199') from test;

返回结果:1


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据研习社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值