HivePlugins

创建自定义 UDF

首先,您需要创建一个扩展 UDF 的新类,并使用一个或多个名为 valuate 的方法。

package com.example.hive.udf;

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

public final class Lower extends UDF {
  public Text evaluate(final Text s) {
    if (s == null) { return null; }
    return new Text(s.toString().toLowerCase());
  }
}

(请注意,已经有一个内置函数,这只是一个简单的示例)。

将代码编译到 jar 中之后,需要将其添加到 HiveClasspath 中。请参阅下面有关部署 jar 的部分。

一旦 Hive 在 jar 中的 Classpath 中启动,最后一步就是按照Create Function中的描述注册您的函数:

create temporary function my_lower as 'com.example.hive.udf.Lower';

现在您可以开始使用它了:

hive> select my_lower(title), sum(freq) from titles group by my_lower(title);

...

Ended Job = job_200906231019_0006
OK
cmo	13.0
vp	7.0

有关更多示例,请参见this page

Hive 0.13开始,您可以按照Permanent Functions中的说明,在当前数据库或指定数据库中将功能注册为永久 UDF。例如:

create function my_db.my_lower as 'com.example.hive.udf.Lower';

为用户定义的功能和用户定义的 SerDes 部署 Jars

为了开始使用 UDF,首先需要将代码添加到 Classpath 中:

hive> add jar my_jar.jar;
Added my_jar.jar to class path

默认情况下,它将在当前目录中查找。您还可以指定完整路径:

hive> add jar /tmp/my_jar.jar;
Added /tmp/my_jar.jar to class path

然后,您的 jar 将在该会话中启动的所有作业的 Classpath 中。要查看已将哪些罐子添加到 Classpath,可以使用:

hive> list jars;
my_jar.jar

有关完整的语法和更多示例,请参见Hive CLI

Hive 0.13开始,UDF 还可以选择在CREATE FUNCTION语句中指定所需的 jar:

CREATE FUNCTION myfunc AS 'myclass' USING JAR 'hdfs:///path/to/jar';

这会将 jar 添加到 Classpath 中,就好像在该 jar 上已调用 ADD JAR 一样。