Hive 內建函式和UDF函式
1)內建函式
hive> show functions; // 顯示所有函式,比官網詳細
hive> desc function substr; // 檢視函式的詳細資訊
hive> desc function extended substr; // 檢視函式的更詳細資訊,包括語法(substr的pos從1開始,<0是從尾開始)
2)UDF函式介紹 User-Defined Functions (UDFs)
built-in 的函式滿足不了我們的業務需求,需要自己開發函式去實現
2.1 UDF (工作常用)
one2one 一條資料進來,一條資料出去 如:concat/lower
2.2 UDAF
A是聚合,即many2one 如:count/max......(聚合函式)
2.3 UDTF(基本用不到)
T是table,即one2many 一條資料進來,多條資料出去 如:lateral view explode
Q:在傳統的db2/oracle ==> 雲化(Hadoop,即:用大資料處理),怎樣實現?
A:首先要保持sql不變,然後根據該sql再在hive上面實現,這樣就得使用UDF函數了。
3)開發UDF
1. 繼承UDF類
2. 重寫evaluate方法建議: -- 要有返回值
-- 引數型別使用Hadoop的型別(只是建議,用java型別也不會錯)
3. 打成jar包
4. 新增到hive中 hive> add jar /home/hadoop/lib/hive-1.0.jar;
5. 建立(臨時)函式 hive> create (temporary) function say_hello as 'com.ruozedata.udf.HelloUDF';
6. 建立持久函式
hive> CREATE FUNCTION say_hello2 AS 'com.ruozedata.udf.HelloUDF'
USING JAR 'hdfs://hadoop000:8020/lib/hive-1.0.jar';
7. 通過hive> list jars; 可以查詢到加了哪些jar包進來
4)注意
自定義UDF,在show functions;命令下可能會沒有顯示到自定義的持久函式,但可以通過以下方法查詢:
mysql> select * from FUNCS \G;