operators
=, !=, <, >, IS NULL, …+, -, *, /, …AND, OR, IN, …
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, …
自定义的 UDF 实现方法:
继承 UDF 类
重写 evaluate 方法
将该 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 的静态类,诸如实现了 UDAFEvaluator3,一个计算函数必须实现的 5 个方法的具体含义如下:init():主要是负责初始化计算函数并且重设其内部状态,一般就是重设其内部字段。一般在静态类中定义一个内部字段来存放最终的结果。
iterate():每一次对一个新值进行聚集计算时候都会调用该方法,计算函数会根据聚集计算结果更新内部状态。当输 入值合法或者正确计算了,则 就返回 true。
terminatePartial():Hive 需要部分聚集结果的时候会调用该方法,必须要返回一个封装了聚集计算当前状态的对象。
merge():Hive 进行合并一个部分聚集和另一个部分聚集的时候会调用该方法。
terminate():Hive 最终聚集结果的时候就会调用该方法。计算函数需要把状态作为一个值返回给用户。
UDTF(User Defined Tabular Functions)
hive 内置的 udtf 函数 (1 -> n):explode, posexplode, parse_url_tuple, …
自定义的实现方法:
继承 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() : 给分区每一行分别编号
RANK():分区排名
DENSE_RANK() : 分区排名 ( 紧密连续的名次)
e.g.
Usage
hive> show functions;hive> desc function funcName;hive> desc function extended funcName; // describe function with some example
customize:
develop UD[.*]F
compile to *.jar
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;