開發Hive自定義UDF,生成16位時間

2021-08-01 06:51:21 字數 1501 閱讀 8559

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...