hive 创建自定义函数 和 hive加载说明

0 hive udf作用都限于对字段进行简单处理,

  udf定义好后被应用一般有三种方式:

  a) hiverc文件中
  b) hql文件中写加载 
  c) hive/scrpits/ 根据文件名从小到大顺序来优先加载文件夹下的文件 

     据说这是工作中经常用到的 但是这是我工作中基本没用到过的。

1 模拟oracl函数 instr(xiangmu, '已注册(') 的效果

2 java代码:

package hiveudf;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;


public class instrfun  extends UDF{ // 

	 public IntWritable evaluate(Text source, Text part) {
	   String sourceStr = source.toString();
	   String partStr = part.toString();
	   int indexPart = sourceStr.indexOf(partStr); // java出现次数以0为基础
	   indexPart++;
	   
	   return new IntWritable(indexPart);
	 }
}

3 将这个javabean打包 为hive-udf.jar ,上次到Linux服务器上

     或者可以放在 hive/lib下 这样看着更正式点,这样的话 第4步add jar就需要修改成 hive/lib的路径

4 hive表注册和使用此函数: 在hive命令行下,执行如下语句

add jar /home/new_load_data/lib/hive-udf.jar; 
create temporary function instrfun as 'hiveudf.instrfun'; 

 5 hive环境中使用写法:

select instrfun(xiangmu,'已注册(') from f_trademark_tmp_hdfs_ext_20150717 limit 4;  

参考链接:

http://blog.csdn.net/zythy/article/details/18818559

 对应工程jar请看附件

加载说明:

   如果你是在修改了 .hiverc后 重新启动了hive客户端 hive>内来执行自定义函数的话,那么能够执行

  因为此时hive客户端重新读到了 hiverc的文件

 

  如果你是想通过 脚本来执行,比如你的自定义函数写在 xx.sql 通过

  hive -t -S -h 192.168.20.200 -f /user/aaa.sql  方式,那么此时走的是hive server端,

  需要重启hive后才能正确执行。

  工作中 一般都是通过方式 b)来加载hive自定义函数,方便灵活,更不需要重启hive。

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2235666