1.繼承hive的udf,並實現evaluate()方法
2.將此類打成jar包,並上傳到集群環境某個目錄下 如:/opt/idworker.jar
3.在hive下執行 add jar /opt/idworker.jar;
4.執行create temporary function row_sequence_key as 『com.test.idworker』;
5.hive下查詢 如:select row_sequence_key,* from tablename;
剛開始按照官網的demo寫了個,一切都正常,按自己的需求寫的時候,出現了生成的時間戳邏輯只執行了一遍,所有行的該字段都是一毛一樣的,後來加上@udftype(deterministic = false)問題解決,該註解指定了當前udf的型別是否是確定性,預設為true
import org.apache.hadoop.hive.ql.exec.udf;
import org.apache.hadoop.hive.ql.udf.udftype;
/** *
*@classname: idworker
*@description: 生成唯一id
*/@udftype(deterministic = false)
public
class
idworker
extends
udf this.workerid = workerid;
}public
synchronized
long
nextid()
} else
if (timestamp < this.lasttimestamp) catch (exception e)
}this.lasttimestamp = timestamp;
long nextid = ((timestamp - twepoch << timestampleftshift)) | (this.workerid << this.workeridshift) | (this.sequence);
// system.out.println("timestamp:" + timestamp + ",timestampleftshift:" + timestampleftshift + ",nextid:" + nextid + ",workerid:" + workerid + ",sequence:"
// + sequence);
return nextid;
}private
long
tilnextmillis(final
long lasttimestamp)
return timestamp;
}private
long
timegen()
}public string evaluate()
}
hive自定義函式UDF
hive自定義函式 udf 可以幫助使用者輕鬆實現在hql語句中展現自定義查詢結果。這裡以乙個簡單的連線函式來實現使用者自定義函式,假設表結構如下 表中只有兩個簡單的字段,id和name。這裡實現乙個將id和name用 連線的函式,最後輸出結果。第一步 書寫stringjoin類,繼承udf,實現名...
hive自定義函式 UDF
幾個命令 檢視所有函式 hive show functions 檢視函式的使用方法 hive desc function 函式名 兩數和 addudf 自定義hive函式 description name myadd value myadd int a int b return a b extend...
hive自定義udf函式
在建立自定義函式時,需要將jar包全部部署到hive server節點的所有機器的使用者定義的udf引數目錄 hive.reloadable.aux.jars.path.jars.path.property property value usr lib hive lib value 呼叫 impor...