Hive中的用户自定义函数
1.1 关于自定义函数
1)Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。
2)当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。
3)根据用户自定义函数类别分为以下三种:
(1)UDF(User-Defined-Function)
一进一出
(2)UDAF(User-Defined Aggregation Function)
聚集函数,多进一出
类似于:count/max/min
(3)UDTF(User-Defined Table-Generating Functions)
一进多出
如lateral view explore()
4)官方文档地址
https://cwiki.apache.org/confluence/display/Hive/HivePlugins
5)编程步骤:
(1)继承org.apache.hadoop.hive.ql.exec.UDF
(2)需要实现evaluate函数;evaluate函数支持重载;
(3)在hive的命令行窗口创建函数
a)添加jar
add jar linux_jar_path
b)创建function
create [temporary] function [dbname.]function_name AS class_name;
(4)在hive的命令行窗口删除函数
Drop [temporary] function [if exists] [dbname.]function_name;
6)注意事项
(1)UDF必须要有返回类型,可以返回null,但是返回类型不能为void;
1.2 案例实操
1)定义了四个UDF类,代码见:GitHub
使用方法:你可以选择在IDEA中checkout该项目,然后使用maven打成jar包后放置到hive的安装目录,“hive/lib”目录下
如:
2)在hive中执行add操作,添加所配置的jar包:
hive (default)> add jar /opt/module/hive/lib/log-hive.jar;
3)注册永久函数
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)验证函数
由于我将Hive的元数据信息选择保存在MySQL中(Hive的Metastore默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore),所以选择登录mysql
[bigdata@hadoop101 ~]$ mysql -uroot -p000000
mysql> show databases;
mysql> use metastore;
mysql> show tables;
mysql> select * from FUNCS;
下面是我在Dbeaver中查看到的表的具体信息:
可以发现四个自定义函数已经添加进去了。
关于FUNC表字段的描述:
5)删除函数
hive (applogsdb)> drop function getdaybegin;
hive (applogsdb)> drop function getweekbegin;
hive (applogsdb)> drop function getmonthbegin;
hive (applogsdb)> drop function formattime;
6)注意:在哪个数据库中注册的永久函数,必须在哪个数据库下将该方法删除
比如在applogsdb数据库中创建的方法,必须在该数据中调用drop方法才能实现删除功能。
Hive中的用户自定义函数的更多相关文章
- Hive中的用户自定义函数UDF
Hive中的自定义函数允许用户扩展HiveQL,是一个非常强大的功能.Hive中具有多种类型的用户自定义函数.show functions命令可以列举出当前Hive会话中的所加载进来的函数,包括内置的 ...
- Hive的UDF(用户自定义函数)开发
当 Hive 提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function). 测试各种内置函数的快捷方法: 创建一个 dual 表 ...
- 样条函数后续(java)--可在hive中执行的函数
之前写的样条插值算法只能在本地执行,但是我想要的是可在hive中执行的jar包,为了符合我的要求,经过痛苦.气愤.悲伤等一系列过程,终于实现了: 想要实现可在hive中执行的jar包,以下是具体步骤: ...
- hive中内置函数
查看函数的详细使用方法 desc function extended 函数名 例如: 1).desc function extended locate locate(substr, str[, pos ...
- php中调用用户自定义函数的方法:call_user_func,call_user_func_array
看UCenter的时候有一个函数call_user_func,百思不得其解,因为我以为是自己定义的函数,结果到处都找不到,后来百度了一下才知道call_user_func是内置函数,该函数允许用户调用 ...
- Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)
本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...
- hive中标准偏差函数stddev()详细讲解
1.标准偏差概念 标准偏差(Std Dev,Standard Deviation) -统计学名词.一种度量数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度.标准偏差越小,这些值偏离平均值就 ...
- Spark SQL 用户自定义函数UDF、用户自定义聚合函数UDAF 教程(Java踩坑教学版)
在Spark中,也支持Hive中的自定义函数.自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_date等 UDAF( ...
- SparkSQL中的自定义函数UDF
在Spark中,也支持Hive中的自定义函数.自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_date等 UDAF( ...
随机推荐
- Docker 概念-2
Docker 是什么? 说了这么多, Docker 到底是个什么东西呢?我们在理解 Docker 之前,首先得先区分清楚两个概念,容器和虚拟机. 可能很多读者朋友都用过虚拟机,而对容器这个概念比较的陌 ...
- 高精度进制转换(poj1220)
常规短除法原理 高精度进制转换是对于特别大的数字来说的,当数字特别大时,难以进行除法和取余的操作,此时通过字符串模拟的办法可以解决. #include <iostream> #includ ...
- EOJ Monthly 2019.11 A(进制转换)
"欢迎您乘坐东方航空公司航班 MU5692 由银川前往上海......" "我们的飞机很快就要起飞了,请收起小桌板,摘下耳机......" 收起了小桌板,摘下了 ...
- vue学习(六) 事件修饰符 stop prevent capture self once
//html <div id="app"> <div @click="divHandler" style="height:150px ...
- C#使用Halcon连接相机
(注意:一个相机不能两个软件同时使用在使用vs的时候把halcon关掉,用halcon的时候把vs的关掉切记*一个大坑* 在vs中调用的代码的时候要是用多线程才能显示出来图像不然则录像显示不出来) 1 ...
- 记一次svg反爬学习
网址:http://www.porters.vip/confusion/food.html 打开开发者工具后 页面源码并不是真实的数字,随便点一个d标签查看其样式 我们需要找到两个文件,food.cs ...
- PHP array_rand() 函数
实例 返回一个包含随机键名的数组: <?php $a=array("red","green","blue","yellow& ...
- php getimagesize 函数 - 获取图像信息
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息. 语法格式:高佣联盟 www.cgewang.co ...
- 珍藏多年的学习资料300G+,赶紧免费领取,从此离大神更进一步
将时间线拉到2014 2014年的寒冬,每天早晨六点钟,都会一个弱小的身影,从学校寝室出发,走在去实习公司的路上.经过食堂边的包子铺,他会顺手买两个包子,一杯豆浆,老板也会像往常一样热情的吆喝 ...
- 教你在 Linux 下时光穿梭
时光穿梭?电影里的桥段吧?良许你又在唬人? 非也非也,良许在这里要给大家介绍 touch 命令,有了它你就可以改变时间戳,达到时光穿梭的目的. touch 命令在我们的工作中使用也相当频繁,我们就由浅 ...