您的位置:首页 > 其它

Hive UDF函数开发及企业规范

2016-12-30 16:05 393 查看

开发步骤

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Hive UDF函数