rank() over
dense_rank() over
row_number() over
http://www.cnblogs.com/dycg/p/4260283.html
Hive可以允许用户编写自己定义的函数UDF,来在查询中使用。Hive中有3种UDF:
UDF: 操作单个数据行,产生单个数据行;
UDAF: 操作多个数据行,产生一个数据行。
UDTF: 操作一个数据行,产生多个数据行一个表作为输出。
自定义函数
1.继承UDF或者UDAF或者UDTF,实现特定的方法。
2将代码打成jar包
3加载jar包
在hive命令窗口中执行
add jar /opt/shell/log/lib/sfbdpudf-0.0.1-jar-with-dependencies.jar;
4穿件临时函数
在hive命令窗口中执行:
create temporary function seqm_chinese as 'com.sf.tools.hive.udf.UDFChineseSeqm';
用户必须要继承UDF,且必须至少实现一个evalute方法,该方法并不在UDF中,但是Hive会检查用户的UDF是否拥有一个evalute方法
UDAF
注意事项:
1,用户的UDAF必须继承了org.apache.hadoop.hive.ql.exec.UDAF;
2,用户的UDAF必须包含至少一个实现了org.apache.hadoop.hive.ql.exec的静态类,诸如常见的实现了 UDAFEvaluator。
3,一个计算函数必须实现的5个方法的具体含义如下:
init():主要是负责初始化计算函数并且重设其内部状态,一般就是重设其内部字段。一般在静态类中定义一个内部字段来存放最终的结果。
iterate():每一次对一个新值进行聚集计算时候都会调用该方法,计算函数会根据聚集计算结果更新内部状态。当输入值合法或者正确计算了,则就返回true。
terminatePartial():Hive需要部分聚集结果的时候会调用该方法,必须要返回一个封装了聚集计算当前状态的对象。
merge():Hive进行合并一个部分聚集和另一个部分聚集的时候会调用该方法。
terminate():Hive最终聚集结果的时候就会调用该方法。计算函数需要把状态作为一个值返回给用户。
4,部分聚集结果的数据类型和最终结果的数据类型可以不同。