开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第三阶段): 网站流量日志分析—扩展—hive 函数分类(udf、 udtf 、vdaf)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/695/detail/12204
网站流量日志分析—扩展—hive 函数分类(udf、 udtf 、vdaf)
作为一个面向分析的数据仓库,hive 除了支持它内置的函数之外还开放了接口让用户自定函数。整体来看可以根据输出的行数分为三个类别 udf、 udtf 、udaf ,接下来看这三种类别函数有什么区别。
udf 通常把函数成为普通函数,普通函数所描述的是实现一进一出,输入一行,输出一行,比如说 substring 截取。
为了更好理解,首先要明白在 hive 函数,可以分为两大块,第一个叫做内置的函数,包含原有的 hive substring 等,另外一个叫做用户自定义函数,这两位函数统称 hive 函数,可以分为三个类别,第一个叫做 udf ,普通函数,substring 函数很简单,穿入一个字符串,指定从 a 开始截取到 b ,就可以返回它一个具体的内容,比如 hello,这就是一个标准的一进一出。再比如,以刚才的参考参数来说还可以去自定义 udf 函数, hive 当中提供接口,当中输入一行,一个a ,一个 b ,返回当中最小的,这也是所谓的一进一出。称之为普通函数。
第二类函数叫做 udtf ,当中的 t 很重要,叫做 table generating 表深层函数,这类函数他所描述的是输入一行,输出多行,输出多行之后,这多行看起来像一个表,所以把它叫做表深层函数,接下来举个例子,这个字段不是普通的字段,它是一个 array 数主字段,里面放着北京、上海、南京、合肥,这个 location 在 hive 当中是复核类型叫做 array string,针对这样一个字段,如果这时候使用 hive 一个类字 udtf 函数叫做explode,它作用与它,变成什么样,这时候传一个函数叫做 explode,把 location 传给它,这个函数就是一个标准的 udtf 函数,把宿主当中的每一个元素变成一行,比如北京一行,上海一行,南京一行,最后一个是合肥。经过这样一个拆分,输入的是一行,输出是四行,一进多输,数据完成了表深层函数,这样就看起来后面数据非常像一个新的表结构,把它叫做表深层函数。这类函数是当下比较陌生的但是确实存在。
接下来第三类函数叫做 udaf ,这个 a 非常重要,叫做 aggregating 聚合,这类函数不管是内置的还是用户自定义的,它称之为聚合函数,就是通常所说的 sum 这类函数,这类函数通常可以对多行产生作用,就是输入多行输出一行,多进一出,sum 求和不管输入多少行,把多少行加起来求和,多进一出。
UDAF聚合函数,输入多行,输出一行,举例,有 name、allen、张三、李四以及王五,接下针对字段使用 count 聚合函数进行统计,统计结果是多少,count 完成之后有几条记录,是五条记录,输入了四条记录,返回了一条记录,这就是输入多行输出一行。
除了它内置的函数之外,讲义提供了如何自定义实现这些,准确来说这个 ud 叫做用户自定义,再次强调是自定义还是内置的实现,整体来看函数可以根据所有输出分为三个过程,普通的,一进一出叫做 udf, 要么是一进多出的叫做 udtf,表深层函数,要么称之为 udaf, 表聚合函数,这是针对 hive 当中众多函数的具体划分根据输入输出的多少。