hive 元数据 自定义_Hive中的用户自定义函数
1.1 關(guān)于自定義函數(shù)
1)Hive 自帶了一些函數(shù),比如:max/min等,但是數(shù)量有限,自己可以通過(guò)自定義UDF來(lái)方便的擴(kuò)展。
2)當(dāng)Hive提供的內(nèi)置函數(shù)無(wú)法滿足你的業(yè)務(wù)處理需要時(shí),此時(shí)就可以考慮使用用戶自定義函數(shù)(UDF:user-defined function)。
3)根據(jù)用戶自定義函數(shù)類別分為以下三種:
?(1)UDF(User-Defined-Function)
?一進(jìn)一出
?(2)UDAF(User-Defined Aggregation Function)
?聚集函數(shù),多進(jìn)一出
?類似于:count/max/min
?(3)UDTF(User-Defined Table-Generating Functions)
?一進(jìn)多出
?如lateral view explore()
4)官方文檔地址
5)編程步驟:
?(1)繼承org.apache.hadoop.hive.ql.exec.UDF
?(2)需要實(shí)現(xiàn)evaluate函數(shù);evaluate函數(shù)支持重載;
?(3)在hive的命令行窗口創(chuàng)建函數(shù)
?a)添加jar
add jar linux_jar_path
?b)創(chuàng)建function
create [temporary] function [dbname.]function_name AS class_name;
?(4)在hive的命令行窗口刪除函數(shù)
Drop [temporary] function [if exists] [dbname.]function_name;
6)注意事項(xiàng)
?(1)UDF必須要有返回類型,可以返回null,但是返回類型不能為void;
1.2 案例實(shí)操
1)定義了四個(gè)UDF類,代碼見:GitHub
使用方法:你可以選擇在IDEA中checkout該項(xiàng)目,然后使用maven打成jar包后放置到hive的安裝目錄,“hive/lib”目錄下
如:
2)在hive中執(zhí)行add操作,添加所配置的jar包:
hive (default)> add jar /opt/module/hive/lib/log-hive.jar;
3)注冊(cè)永久函數(shù)
hive (default)>create function getdaybegin AS 'com.bigdata.hive.DayBeginUDF';
hive (default)>create function getweekbegin AS 'com.bigdata.hive.WeekBeginUDF';
hive (default)>create function getmonthbegin AS 'com.bigdata.hive.MonthBeginUDF';
hive (default)>create function formattime AS 'com.bigdata.hive.FormatTimeUDF';
4)驗(yàn)證函數(shù)
?由于我將Hive的元數(shù)據(jù)信息選擇保存在MySQL中(Hive的Metastore默認(rèn)存儲(chǔ)在自帶的derby數(shù)據(jù)庫(kù)中,推薦使用MySQL存儲(chǔ)Metastore),所以選擇登錄mysql
[bigdata@hadoop101 ~]$ mysql -uroot -p000000
mysql> show databases;
mysql> use metastore;
mysql> show tables;
mysql> select * from FUNCS;
下面是我在Dbeaver中查看到的表的具體信息:
可以發(fā)現(xiàn)四個(gè)自定義函數(shù)已經(jīng)添加進(jìn)去了。
關(guān)于FUNC表字段的描述:
5)刪除函數(shù)
hive (applogsdb)> drop function getdaybegin;
hive (applogsdb)> drop function getweekbegin;
hive (applogsdb)> drop function getmonthbegin;
hive (applogsdb)> drop function formattime;
6)注意:在哪個(gè)數(shù)據(jù)庫(kù)中注冊(cè)的永久函數(shù),必須在哪個(gè)數(shù)據(jù)庫(kù)下將該方法刪除
比如在applogsdb數(shù)據(jù)庫(kù)中創(chuàng)建的方法,必須在該數(shù)據(jù)中調(diào)用drop方法才能實(shí)現(xiàn)刪除功能。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的hive 元数据 自定义_Hive中的用户自定义函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 字段定义_逐浪CMS对用户注册字段正则的
- 下一篇: html树状图右侧_树状图及制作方法(E