Hive自定义函数-UDF

本文详细介绍了Hive中的自定义函数,包括UDF(一行输入,一行输出)、UDAF(多行输入,一行输出)和UDTF(单行输入,多行输出)。通过示例展示了如何使用explode UDTF、LATERAL VIEW解决查询限制,以及如何编写和注册自定义函数,如UDF的strip函数和UDAF的求最大值函数。此外,还提到了Hive函数的大小写不敏感特性以及如何持久化和创建临时函数。
摘要由CSDN通过智能技术生成

Hive提供了大多数操作符,例如用于测试相等性的x='a',用于判空的x IS NULL,用于字符串匹配的x LIKE 'a%',数学运算x+1,逻辑判断x OR y,||是或判断而不是连接字符串,字符串的连接通过concat函数来完成。

Hive内置了非常多的函数。大致可以分为:

  • 数学和统计函数
  • 字符串函数
  • 日期函数
  • 条件函数
  • 聚合函数
  • 操作XML和JSON的函数

在Hive shell,中,可以通过show functions来查看:
show function.jpg-55.2kB

desc funtion可以获取简单的 函数帮助文档:

desc-function.jpg-63kB

当Hive内置的函数无法满足需要时,可以自定义函数。Hive允许我们在查询中轻易地使用自定义的函数。

UDF必须使用Java语言,如果想要其他语言来实现,可以考虑SELECT TRANSFORM查询,它允许Hive与自定义的脚本通过Steam进行交互,类似MapReduce StreamingPig Stream

Hive中有3中类型的自定义函数:通常的UDF、UDAF(user-defined aggregate function)、UDTF(user-difined table-generating function)。这三种函数的区别在于其输入和输出的行数:

  • UDF:一行输入,一行输出
  • UDGF:多行输入,一行输出
  • UDTF:单行输入,多行输出(table)

UDTF

考虑一个只有一列的表,该列的值为字符串数组:

CREATE TABLE arrays(x ARRAY<STRING>)
  ROW FORMAT DELIMITED
    FILEDS TERMINATED BY '\001'
    COLLECTION ITEMS TERNIMATED BY '\002'

表定义中指定了集合中元素的分隔符为CTRL + B。表中的数据样例如下:

hive> SELECT * FROM arrays;
["a","b"]
["c","b","e"]

接下来我们使用explode UDTF来转换这张表,这个函数将字符数组中的每个元素都转化为一行,有点Flat的意思:

hive> SELECT explode(x) AS y FROM arrays;

a
b
c
d
e

使用UDTF的SELECT查询语句不能再有其他字段的表达式,这是很大的限制。可以使用LATERAL VIEW查询来解决这一问题。比如我们有以下pageAds表数据:

pageid adid_list
front_page [1,2,3]
contact_page [3,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值