Hive UDF(User Defined Function)允許用戶自定義函數來處理數據
CREATE FUNCTION my_udf AS 'com.example.MyUDF' USING JAR 'hdfs:/path/to/your/udf.jar';
這里,com.example.MyUDF
是UDF類的完全限定名,hdfs:/path/to/your/udf.jar
是包含UDF類的JAR文件的路徑。
SELECT my_udf(column1, column2) FROM table_name;
這里,my_udf
是注冊的UDF名稱,column1
和column2
是要傳遞給UDF的列。
public int add(int a, int b) {
return a + b;
}
如果UDF接受一個字符串參數并返回其長度,可以這樣定義:
public int stringLength(String s) {
return s.length();
}
public int add(int a, int b) {
return a + b;
}
如果UDF返回一個字符串,可以這樣定義:
public String concat(String s1, String s2) {
return s1 + s2;
}
package com.example;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.IntWritable;
public class AddUDF extends UDF {
public IntWritable evaluate(IntWritable a, IntWritable b) {
return new IntWritable(a.get() + b.get());
}
}
這個UDF類實現了org.apache.hadoop.hive.ql.exec.UDF
接口,并重寫了evaluate
方法。在evaluate
方法中,我們接受兩個IntWritable
類型的參數,計算它們的和,并返回一個新的IntWritable
對象。
USING JAR
子句指定其路徑。例如:CREATE FUNCTION my_udf AS 'com.example.MyUDF' USING JAR 'hdfs:/path/to/your/udf.jar';
這里,hdfs:/path/to/your/udf.jar
是包含UDF類和依賴庫的JAR文件的路徑。
總之,Hive UDF提供了強大的功能,允許用戶自定義函數來處理數據。通過創建和注冊UDF,可以在Hive查詢中使用這些函數,從而實現更復雜的數據處理任務。