hive函数中的operators, UDF, UDAF, UDTF, PTF

operators

=, !=, <, >, IS NULL, ...
+, -, *, /, ...
AND, OR, IN, ...java

UDF(User Defined Functions)

hive内置的udf函数(1 -> 1):**
math: round, floor, ceil, exp, log, ...
date: to_date, from_unixtimestamp, ...
conditional: if, isnull, case, coalsce, ...
string: char, concat, lower, trim, repeat, ...apache

自定义的UDF实现方法:数组

  1. 继承UDF类
  2. 重写evaluate方法
  3. 将该java文件编译成jar

UDAF(User Defined Aggregate Functions)

hive内置的udaf函数(n -> 1):
count, sum, min, max, corr, ....函数

自定义的UDAF实现方法:
1,用户的UDAF必须继承了org.apache.hadoop.hive.ql.exec.UDAF;
2,用户的UDAF必须包含至少一个实现了org.apache.hadoop.hive.ql.exec的静态类,诸如实现了 UDAFEvaluator
3,一个计算函数必须实现的5个方法的具体含义以下:
init():主要是负责初始化计算函数而且重设其内部状态,通常就是重设其内部字段。通常在静态类中定义一个内部字段来存放最终的结果。oop

iterate():每一次对一个新值进行汇集计算时候都会调用该方法,计算函数会根据汇集计算结果更新内部状态。当输 入值合法或者正确计算了,则 就返回true。lua

terminatePartial():Hive须要部分汇集结果的时候会调用该方法,必需要返回一个封装了汇集计算当前状态的对象。url

merge():Hive进行合并一个部分汇集和另外一个部分汇集的时候会调用该方法。spa

terminate():Hive最终汇集结果的时候就会调用该方法。计算函数须要把状态做为一个值返回给用户。unix

UDTF(User Defined Tabular Functions)

hive内置的udtf函数(1 -> n):
explode, posexplode, parse_url_tuple, ...对象

自定义的实现方法:

  1. 继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF

2.initialize():UDTF首先会调用initialize方法,此方法返回UDTF的返回行的信息(返回个数,类型)

3.process:初始化完成后,会调用process方法,真正的处理过程在process函数中,在process中,每一次forward() 调用产生一行;若是产生多列 能够将多个列的值放在一个数组中,而后将该数组传入到forward()函数
4.最后close()方法调用,对须要清理的方法进行清理

PTF(Partitioned table Function, Window Functions)

hive内置的ptf函数(n -> m):
ROW_NUMBER(), RANK(), DENSE_RANK()

ROW_NUMBER() : 给分区每一行分别编号

clipboard.png

RANK() :分区排名

clipboard.png

DENSE_RANK() : 分区排名(紧密连续的名次)

clipboard.png

e.g.

clipboard.png

Usage

hive> show functions;
hive> desc function funcName;
hive> desc function extended funcName; // describe function with some example

customize:

  1. develop UD[.*]F
  2. compile to *.jar
  3. deploy to cluster

hive> add jar /path/to/lib.jar;hive> create temporary function xxxx as "java.class.name";hive> select xxxx(...) ...;hive> drop temporary function xxxx;

相关文章
相关标签/搜索